MongoDB:获取文档,只有一个数组对象

时间:2016-01-25 15:58:19

标签: javascript mongodb meteor

我有多个这样的文件:

{
    "_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"
        }
    ]
}

1 个答案:

答案 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});