Mongoose find返回文档而不是数组中的特定对象

时间:2016-12-02 22:37:20

标签: javascript node.js mongodb

当我尝试使用find({query})在数组中查找特定对象时,我总是从数组中获取所有元素。 活动数组存储活动(将有数千个活动),您可以在以下代码段中看到:

这是我的收藏:

{
    "_id" : ObjectId("58407140755324d04db2ce95"),
    "owner" : 103429326776572,
    "activities" : [
            {
                    "name" : "test1",
                    "startTime" : ISODate("2016-08-11T17:41:54Z"),
                    "type" : "te1",
                    "lat" : 1,
                    "lon" : 1,
                    "creator" : 126212904493088,
                    "coverPhoto" : {
                            "name" : "test1",
                            "path" : "c:\\Users\\Francis\\Desktop\\dusk\\public\\coverPhotos\\SJ9tpP6Mx.jpg"
                    },
                    "identifier" : "H1g9F6vpGl",
                    "users" : [
                            1,
                            2,
                            3
                    ],
                    "hashTags" : [
                            "some",
                            "hashtags"
                    ]
            },
            {
                    "name" : "test2",
                    "startTime" : ISODate("2016-08-11T17:41:53Z"),
                    "type" : "te2",
                    "lat" : 1,
                    "lon" : 1,
                    "creator" : 103312904493090,
                    "coverPhoto" : {
                            "name" : "test2",
                            "path" : "c:\\Users\\Francis\\Desktop\\dusk\\public\\coverPhotos\\Hy8qpvafe.jpg"
                    },
                    "identifier" : "rJlU5TvpMx",
                    "users" : [
                            1,
                            2,
                            3
                    ],
                    "hashTags" : [
                            "some",
                            "hashtags"
                    ]
            }
    ]

}

我需要获得具有特定标识符的活动。 我试图使用像:

这样的查询

1)db.myCollection.find({'activities.identifier':“rJlU5TvpMx”})

2)db.myCollection.find({'activities':{$ elemMatch:{“identifier”:“rJlU5TvpMx”,“creator”:103312904493090}})

所有与''或'“符号的组合

我在mongodb docs上找到了与我相同的文档模式中的上述查询。

你能告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

您可以根据需要尝试使用单个匹配或多个匹配。这可以使用 $elemMatch(projection)

db.myCollection.find({"_id" : ObjectId("58407140755324d04db2ce95")},
             {activities: {$elemMatch: { identifier: "rJlU5TvpMx"}}})

db.myCollection.find( {"_id" : ObjectId("58407140755324d04db2ce95")},
             {activities: {$elemMatch: {creator : 103312904493090, identifier: "rJlU5TvpMx" }}})

答案 1 :(得分:0)

您正在寻找在查询中作为参数传递的投影对象。它允许从搜索中返回特定字段,而不是整个文档。 http://mongoosejs.com/docs/api.html#model_Model.find

我还建议在这里查看对这个问题的回答:Mongoose Query: Find an element inside an array它使用unwind运算符输入数组,因为它似乎与你的需求相关。

答案 2 :(得分:0)

在您正在搜索的集合中,您只有一个文档(对象)。如果将方法find()应用于集合,并且里面的查询与activities.identifier中的值匹配,则它将返回唯一的Document(对象)。

要更好地了解我在谈论的内容,请在mongoose API doc上查看example 并查询结果here

请尝试检查https://docs.mongodb.com/v3.0/reference/operator/projection/elemMatch/#proj._S_elemMatch而不是