在MongoDB中查找属于名称/值对的值而不是数组元素的子文档
也许我的文档结构不太适合我要做的事情,但经过一段时间的努力,我意识到,在MongoDB中查找属于名称/值对的值而不是数组元素的子文档,mongodb,mongodb-query,Mongodb,Mongodb Query,也许我的文档结构不太适合我要做的事情,但经过一段时间的努力,我意识到,$elemMatch可能不是我的朋友。以下是一份示例文档: { "field": { "abc": { x: 0, str: "aaa" }, "def": { x: 1, str: "bbb" }, "ghi": { x: 2, str: "ccc" } } } 我正在尝试构造一个查询,以查找满足
$elemMatch
可能不是我的朋友。以下是一份示例文档:
{
"field": {
"abc": {
x: 0,
str: "aaa"
},
"def": {
x: 1,
str: "bbb"
},
"ghi": {
x: 2,
str: "ccc"
}
}
}
我正在尝试构造一个查询,以查找满足“field.$.x>1”的文档或任何满足该程度的文档。基本上,第二级字段的名称可以是任何内容。如果
字段
是一个数组,我猜$elemMatch
会工作得很好。因为您不知道必须使用的键的名称,它会将字段
转换为三个键值对的数组。然后,您可以运行以在x
上应用您的条件,并检查是否有任何项目符合指定的条件:
db.collection.find({
$expr: {
$anyElementTrue: {
$map: {
input: { $objectToArray: "$field" },
in: { $gt: [ "$$this.v.x", 1 ] }
}
}
}
})
有没有办法指定2+条件?如果我试图并排添加更多的
$gt
,我会得到表示表达式的对象必须正好有一个字段。如果我想查询一系列的值呢?算出了。。。它应该是这样的:in:{$and:[{$gt:[“$$this.v.x”,1]},{$lte:[“$$this.v.x”,10]}