我在mongodb中有这个文件
{
"name": "test2",
"_id": "1502609098801598ffeca615f5d3dd09087c6",
"events": {
"0": {
"delay": "0",
"actionid": "2"
},
"1": {
"delay": "0",
"actionid": "3"
}
}
}
我想查找包含具有特定actionid的事件的文档 我试过这样的东西,但我找不到我想要的东西
db.mycollection.find({ "events.$.actionid":"2" })
db.mycollection.find({ "events.$**.actionid":"2" })
db.mycollection.find({ "events.$": { $elemMatch: { "actionid":"2"} })
请注意:我无法更改文档结构,mongodb版本是3.0.6
答案 0 :(得分:0)
我们可以使用mongodb中的聚合功能和project object to an array
db.test.aggregate( [ { "$project" : { "events" : { "$objectToArray" : "$events" } } } ] )
在此之后我们可以使用$match
的常规数组过滤db.test.aggregate([
{ "$project":
{ "events": {"$objectToArray": "$events"} } },
{ "$match":
{ "events.v.actionid" : "2" } } ] )
这将输出以下内容:
{
"_id" : "1502609098801598ffeca615f5d3dd09087c6",
"events" : [
{
"k" : "0",
"v" : {
"delay" : "0",
"actionid" : "2"
}
},
{
"k" : "1",
"v" : {
"delay" : "0",
"actionid" : "3"
}
}
]
}
>
因此,您可能希望将文档投影回其原始结构