试图找到一种到达子子字段的方法,其中包含动态子字段。不知道如何到达那里。寻找像$用于数组的东西。
我的数据结构类似于
{
_id: ObjectId("59355deee13f1a1260f17421"),
product: {
shirt: {
color: "black"
}
}
},
{
_id: ObjectId("59355deee13f1a1260f17422"),
product: {
top: {
color: "red"
}
}
},
{
_id: ObjectId("59355deee13f1a1260f17423"),
product: {
shoes: {
color: "black"
}
}
},
{
_id: ObjectId("59355deee13f1a1260f17424"),
product: {
belt: {
color: "brown7"
}
}
},
寻找相应的
db.things.find({product.$.color: "black"})
答案 0 :(得分:2)
这应该有效
db.getCollection('things').find({$where: function() {
for (var field in this.product) {
if (this.product[field].color == "black") return true;
}
return false;
}})
答案 1 :(得分:0)
上述文档可以表示为嵌入式文档,因为所有数据都属于公共实体,便于使用$elemMatch运算符从嵌入式文档中查询数据。它的表示应如下所示。
{
"_id": ObjectId("59355deee13f1a1260f17421"),
"product": [{
"name": "shirt",
"color": "black"
},
{
"name": "top",
"color": "red"
},
{
"name": "shoes",
"color": "black"
},
{
"name": "belt",
"color": "brown7"
}
]
}
根据上述问题中提到的描述获取色域值为黑色的文档,请尝试在MongoDB shell中执行以下查询。
db.things.find({product:{$elemMatch:{color:'black'}}})