Javascript MongoDB:获取文档和数组中的一个对象
我得到了多个这样的文档:Javascript MongoDB:获取文档和数组中的一个对象,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我得到了多个这样的文档: { "_id" : "sgG6G9XTvvjj7uxwQ", "title" : "A title", "notes" : [ { "id" : "ePce6fBAHx9KeKjuM", "timestamp" : 1453731403807, "message" : "some text", "name" : "Tom"
{
"_id" : "sgG6G9XTvvjj7uxwQ",
"title" : "A title",
"notes" : [
{
"id" : "ePce6fBAHx9KeKjuM",
"timestamp" : 1453731403807,
"message" : "some text",
"name" : "Tom"
},
{
"id" : "BAHx9KeKjuMePce6f",
"timestamp" : 1453731403808,
"message" : "some text",
"name" : "Bob"
},
{
"id" : "ePce6fBAHx9KeKjuM",
"timestamp" : 1453731403809,
"message" : "some text",
"name" : "Tom"
}
]
}
我使用此查找-查询获取此文档:
Collection.find({}, { sort: { title: 1 }});
但是我不需要完整的notes
字段。我只对最后一个note对象的id
感兴趣。这意味着我必须按时间戳对所有notes对象进行排序,然后只取第一个(=最新的)
我不太确定,我是否可以通过查找
-查询来完成这项工作,或者我是否必须在获得完整数据后才能完成这项工作
所以对我来说最好的结果是:
{
"_id" : "sgG6G9XTvvjj7uxwQ",
"title" : "A title",
"notes" : [
{
"id" : "ePce6fBAHx9KeKjuM"
}
]
}
可以使用投影限制返回的数组元素数。例如:
db.collection.find({}, {title: 1, "notes.id": 1, notes: {$slice: 1}}).sort({title: 1});
将返回:
{
"_id" : "sgG6G9XTvvjj7uxwQ",
"title" : "A title",
"notes" : [
{
"id" : "ePce6fBAHx9KeKjuM"
}
]
}
那很好。我想我必须保留时间戳和时间戳的顺序。我该如何在客户机上进行地图缩小?MongoDB文档网站上有一个很好的解释,我找到了一个更好的投影方法。我已经更新了我的答案。我认为这正确地解决了你的问题。谢谢你接受我的回答;-)如果需要输出中包含的其他项,只需将它们添加到投影中,例如“notes.message”:1
,也可以排除不需要的项,例如集合。find({},{“notes.message”:-1})
将返回除notes数组每个元素中的消息之外的所有内容。您可以在MongoDB文档中的参考中了解更多信息: