使用$ project的Mongo聚合重命名字段?

Mar*_*tyn 8 mongodb

我正在尝试生成聚合结果但重命名一些字段:

db.articles.aggregate([
    {$match: {
        "model.lang": "en"
    }},
    {$project: {
        "_id": 0,
        "model.title": 1,
        "model.address_en": "$address",
        "model.date": { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
    }}
]);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正在尝试将"model.title"重命名为"title",将"model.address_en"重命名为"address",将"model.date"重命名为"date"..但没有太多运气:

{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
{ "model" : { "date" : null } }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

zan*_*ngw 15

鉴于该文件 articles

{ "_id" : ObjectId("56cea763d43e3500f6768482"), 
  "name" : "aaa", 
  "model" : { "lang" : "en", 
               "title" : "b", 
               "date" : ISODate("2016-02-25T07:04:03.414Z") 
             }, 
           }
Run Code Online (Sandbox Code Playgroud)

将"model.title"重命名为"title",将"model.address_en"重命名为"address",将"model.date"重命名为"date"

db.articles.aggregate([
             {$match: {'model.lang': 'en'}}, 
             {$project: {
                          _id: 0, 
                          'title': '$model.title', 
                          'date': {$dateToString: {format: '%Y-%m-%d', 
                                                   date: '$model.date'}}}}])
Run Code Online (Sandbox Code Playgroud)

结果是

{ "date" : "2016-02-25", "title" : "b" }
{ "date" : "2016-02-25", "title" : "c" }
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以用这个

db.articles.aggregate([
    {
        $match: {
            "model.lang": "en"
        }
    },
    {
        $project: {
            "_id": 0,
            "title": "$model.title",
            "address": "$model.address_en",
            "date": {
                $dateToString: { 
                    format: "%Y-%m-%d", date: "$model.date" 
                }
            }
        }
    }
]);
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。 (2认同)