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"----// 
    } 
    } 

]) 

クエリ出力である: - - :ここでは

がクエリで、日付型、すなわちとしてMongoDBの中

{ 
    "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フィールドのデータストア

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" } } 
     } 
    } 
]) 

あなたは$dateToStringをサポートしていませんMongoDBのバージョン2.6またはそれ以前のバージョンを使用している場合オペレータが必要です。パイプラインステージは2つ必要です。$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] } 
       ] 
      }  
     } 
    } 
]) 

次の例は、このアプローチを示しています

関連する問題