我有多个这样的文件:
{
"_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"
}
]
}
我使用此find
- 查询来获取此文档:
Collection.find({}, { sort: { title: 1 }});
但我不需要完整的notes
字段。我只对最后一个音符对象的id
感兴趣。这意味着我必须按时间戳排序所有笔记对象,然后选择第一个(=最新的)。
我不太确定,如果我可以通过find
- 查询执行此操作,或者我必须在获取完整数据后执行此操作。
所以对我来说最好的结果是:
{
"_id" : "sgG6G9XTvvjj7uxwQ",
"title" : "A title",
"notes" : [
{
"id" : "ePce6fBAHx9KeKjuM"
}
]
}
答案 0 :(得分:3)
您可以使用$slice投影来限制返回的数组元素的数量。例如:
// frame-script.js
addMessageListener("message_from_ext", function(message){
try{
var _message = {
from: "content",
to: "web",
data: message
};
content.postMessage(_message, "*"); //getting <unavailable> on the content object
}catch(e){
console.log(e);
}
});
将返回:
db.collection.find({}, {title: 1, "notes.id": 1, notes: {$slice: 1}}).sort({title: 1});