我有一个像这样的 mongodb 数据库:
{
"_id" : ObjectId("530d24150fef5d9b065909ca"),
"name" : "name 1",
"my_array" : [
{"key" : "date", "value": 19},
{"key" : "id", "value": 5}
]
}
{
"_id" : ObjectId("530d24150fef5d9b065909ca"),
"name" : "name 2",
"my_array" : [
{"key" : "date", "value": 9},
{"key" : "id", "value": 11}
]
}
{
"_id" : ObjectId("530d24150fef5d9b065909ca"),
"name" : "name 3",
"my_array" : [
{"key" : "date", "value": 10},
{"key" : "id", "value": 13},
{"key" : "name", "value": 'test'},
]
}
我想根据my_array中的K-V进行查询 . 我知道要列出具有键名的项目:
db.test.find({"my_array.key": 'name'})
但是,我不知道如何使用键值过滤项目,比如获取项目哪个键为'id'且值大于10.我的样本结果必须是:
{
"_id" : ObjectId("530d24150fef5d9b065909ca"),
"name" : "name 2",
"my_array" : [
{"key" : "date", "value": 9},
{"key" : "id", "value": 11}
]
}
{
"_id" : ObjectId("530d24150fef5d9b065909ca"),
"name" : "name 3",
"my_array" : [
{"key" : "date", "value": 10},
{"key" : "id", "value": 13},
{"key" : "name", "value": 'test'},
]
}
而且,我曾尝试过以下命令行:
db.test.find({"my_array.key": 'id', "my_array.value": {$gt : 10}})
db.test.find({"my_array":{"key": 'id', "value": {$gt : 10}}})
那些都不行......
提前致谢 .
3 回答
您可以使用$elemMatch来实现相同的目标 .
尝试以下查询 .
您需要使用$elemMatch查找包含符合条件的两个元素的文档:
请记住,这与文档匹配,而不是数组元素 . 这里使用投影只会获得 first 值 .
如果要在阵列中过滤多个条目,则需要使用聚合:
请参阅此内容以查找问题的答案 .
db.test.find({my_array: {$elemMatch: {key: 'id', value: {$gt: 10}}}})