我有以下文档结构
{
"_id" : "aaa0001",
"path" : "/some/path",
"information" : {
"name" : "info"
},
"colors" : {
"colors" : [
{
"key" : "AAAA001",
"name" : "White"
},
{
"key" : "BBBB002",
"name" : "Black"
}
]
}
}
我的想法是我必须通过颜色键返回文档。我有两个参数" path"和#34;颜色",所以,我试图做这样的事情
db.components.find(
{$and:[
{"path" : "/some/path"},
{"colors":{"colors" : {$elemMatch: { "key" : "AAAA001" } } } }
]})
我收到以下消息"脚本已成功执行,但没有显示结果"。
有人可以给我一些指示吗?
感谢
答案 0 :(得分:1)
使用以下查询:
db.components.find({
"path": "/some/path",
"colors.colors.key" : "AAAA001"
})
MongoDB希望查询文档包含字段值对{ <field>: <value> }
。因此,在您的示例中,您要查询colors
字段等于的文档:
{"colors" : {$elemMatch: { "key" : "AAAA001" } } }
对于$and
和$elemMatch
运营商,您不需要这么简单的查询。
有关详细信息,请参阅Query Documents。
您还可以使用Positional Operator $仅从colors
数组中选择匹配的子文档:
db.components.find({
"path": "/some/path",
"colors.colors.key" : "AAAA001"
}, {
_id: 0,
"colors.colors.$": 1
})
尽管如此,您仍然无法更改文档结构,从而获得
{ "colors" : { "colors" : [ { "key" : "AAAA001", "name" : "White" } ] } }