数组项上的$ dateToString

时间:2017-10-18 04:25:07

标签: mongodb mongodb-query aggregation-framework

如果我有以下Mongo文件

{
    "_id" : ObjectId("59e6cb45a902f0f3ea1e35cc"),
    "title" : "Book 1",
    "authors" : [ 
        {
            "name" : "Adam",
            "birthday" : ISODate("1982-03-22T22:41:19.198Z")
        }
    ]
}

如何使用$dateToString预测作者的生日。现在我有

db.getCollection('coll')
  .aggregate([
     {$match: {}}, 
     {$project: 
        {  
          title: 1, 
          authors: {
            name: 1, 
            birthday: { 
              $dateToString: { format: "%m", date: "$birthday" } 
            } 
          }
        } 
      }
])

但是$birthday找不到当前作者的生日,而是返回null。而且我已经尝试了我能想到的所有其他可能性。全部错误输出或返回null。

1 个答案:

答案 0 :(得分:2)

使用$map进行此类操作。它的用途是重塑数组,一些$project符号是一个相对较新的东西,只有有限的应用程序:

db.getCollection('coll').aggregate([
   { "$match": {}}, 
   { "$project": {  
     "title": 1, 
     "authors": {
       "$map": {
         "input": "$authors",
         "as": "item",
         "in": {
           "name": "$$item.name",
           "birthday": { 
             "$dateToString": { "format": "%m", "date": "$$item.birthday" }
           } 
         }
       }
     } 
   }}
 ])

确保运算符应用于正在处理的数组的特定元素,并返回新数组。