1

В моем запросе ключевое слово concat не работает, оно возвращает null.Mongodb concat не работает в агрегировании

Вот вопрос: -

db.leads.aggregate([ 
{$project:{ 
    _id:0, 
    status:1, 
    stage:1, 
    "todo.title":1, 
    created:{ 
     day:{$substr:["$createdOn",8,2]}, 
     month:{$substr:["$createdOn",5,2]}, 
     year:{$substr:["$createdOn",0,4]} 
     }, 
    myDate:{$concat:["$created.day","-","$created.month","-","$created.day"]} 
     //----above $concat is not working-----// 
     //--i want that `myDate` should be "12-09-2016"----// 
    } 
    } 

]) 

Здесь выводится запрос: -

{ 
    "stage" : "Prospect", 
    "todo" : [], 
    "status" : "OPEN", 
    "created" : { 
     "day" : "12", 
     "month" : "09", 
     "year" : "2016" 
    }, 
    "myDate" : null 

    //--here i want that `myDate` should be "12-09-2016"----// 
} 

createdOn поле хранения данных в MongoDB как дата типа т.е.

enter image description here

ответ

4

Вы не нуждаетесь необходимо, чтобы оператор $concat (т. если вы используете MongoDB 3.0 и новее), оператор $dateToString делает это для вас уже:

db.leads.aggregate([ 
    { 
     "$project": {   
      "status": 1, 
      "stage": 1, 
      "todo.title": 1, 
      "created": { 
       "day": { "$dayOfMonth": "$createdOn" }, 
       "month": { "$month": "$createdOn" }, 
       "year": { "$year": "$createdOn" } 
      }, 
      "myDate": { "$dateToString": { "format": "%Y-%m-%d", "date": "$createdOn" } } 
     } 
    } 
]) 

Если вы используете версии MongoDB 2.6 или более ранние, которые не имеют поддержки для $dateToString оператора, то вам нужно два $project стадии трубопровода. Первый создает созданное поле даты, которое затем выводит результат на следующий этап $project, который создает myDate.

Следующий пример показывает этот подход:

db.leads.aggregate([ 
    { 
     "$project": {   
      "status": 1, 
      "stage": 1, 
      "todo.title": 1, 
      "created": { 
       "day": { "$substr": ["$createdOn", 8, 2] }, 
       "month": { "$substr": ["$createdOn", 5, 2] }, 
       "year": { "$substr": ["$createdOn", 0, 4] } 
      } 
     } 
    }, 
    { 
     "$project": { 
      "_id": 0, 
      "status": 1, 
      "stage": 1, 
      "todo": 1, 
      "created": 1, 
      "myDate": { 
       "$concat": [ 
        "$created.year", 
        "-", 
        "$created.month", 
        "-", 
        "$created.day" 
       ] 
      }  
     } 
    } 
]) 

или, скорее, в качестве одного трубопровода с выражениями, как и $concat аргументов:

db.leads.aggregate([ 
    { 
     "$project": { 
      "_id": 0,   
      "status": 1, 
      "stage": 1, 
      "todo.title": 1, 
      "created": { 
       "day": { "$substr": ["$createdOn", 8, 2] }, 
       "month": { "$substr": ["$createdOn", 5, 2] }, 
       "year": { "$substr": ["$createdOn", 0, 4] } 
      }, 
      "myDate": { 
       "$concat": [ 
        { "$substr": ["$createdOn", 0, 4] }, 
        "-", 
        { "$substr": ["$createdOn", 5, 2] }, 
        "-", 
        { "$substr": ["$createdOn", 8, 2] } 
       ] 
      }  
     } 
    } 
])