相关疑难解决方法(0)

mongodb聚合框架 - 获取嵌套数组的第一个文档的字段

考虑以下是我的文档存储在集合中 Users

{
  _id : "User1",
  joined : ISODate("2011-03-02"),
  likes : {
           sublikes: [
                      {WebsiteID:'001': WebsiteName: 'ABCD'},
                      {WebsiteID:'002': WebsiteName: '2BC2'},
                      {WebsiteID:'003': WebsiteName: '3BC3'},
                      //........... 
                      //........... 
                      {WebsiteID:'999999': WebsiteName: 'SOME_NAME'}
                     ]
          }
}
Run Code Online (Sandbox Code Playgroud)

现在使用mongodb聚合框架我需要获取它

collection.aggregate([
                        { $project: {
                            _id: 1,
                            "UserID": "$_id", 
                            "WebsiteName": "$likes.sublikes[0]['WebsiteName']"
                        }
                        },
                         { $match: { _id: 'User1'} }
                      ], function (err, doc) {
 ///Not able to get the WebsiteName: 'ABCD'
});
Run Code Online (Sandbox Code Playgroud)

如果我使用$unwind文档变成批量(特别是在上面的情况下),所以我不想放松它只获取数组中的第一项(不论其他人)

任何人都可以给我提示如何访问并重命名该字段?


更新 1:即使我尝试投影"WebsiteName": "$likes.sublikes.0.WebsiteName".没工作:-(

更新 2:未解决的问题 - https://jira.mongodb.org/browse/SERVER-4589

截至目前$at不起作用.抛出错误:

{ …
Run Code Online (Sandbox Code Playgroud)

mongodb

7
推荐指数
1
解决办法
3632
查看次数

仅返回mongo投影中的数组值

有没有办法只返回mongodb投影中的属性值?例如,我有一个文件,其属性值为数组.我希望查询中的返回对象只是数组,而不是property: [ .. ].例:

文献:

db.test.insert({ name: "Andrew",
   attributes: [ { title: "Happy"},
                 { title: "Sad" }
               ]
});
Run Code Online (Sandbox Code Playgroud)

查询:

db.test.find({name: "Andrew"},{attributes:1, "_id":0});
Run Code Online (Sandbox Code Playgroud)

返回:

{ "attributes" : [ { "title" : "Happy" }, { "title" : "Sad" } ] }
Run Code Online (Sandbox Code Playgroud)

我希望它返回数组:

[ { title: "Happy"},
  { title: "Sad" }
]
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?谢谢

mongodb

6
推荐指数
1
解决办法
8680
查看次数

标签 统计

mongodb ×2