Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB:获取文档和数组中的一个对象_Javascript_Mongodb_Meteor - Fatal编程技术网

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文档中的参考中了解更多信息: