当我尝试使用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上找到了与我相同的文档模式中的上述查询。
你能告诉我我做错了什么吗?
答案 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而不是