【发布时间】:2014-10-06 10:12:42
【问题描述】:
我有以下 mongo 文档,它是一个更大的文档的一部分,称为属性,它也有颜色和大小
> db.attributes.find({'name': {'en-UK': 'Fabric'}}).pretty()
{
"_id" : ObjectId("543261cda14c971132fa2b91"),
"values" : [
{
"source" : [
{
"_id" : ObjectId("543261cda14c971132fa2b79"),
"name" : {
"en-UK" : "Combed Cotton"
}
},
],
"name" : [
{
"_id" : ObjectId("543261cda14c971132fa2b85"),
"name" : {
"en-UK" : "Brushed 3-ply"
}
},
{
"_id" : ObjectId("543261cda14c971132fa2b8f"),
"name" : {
"en-UK" : "Plain Weave"
}
},
{
"_id" : ObjectId("543261cda14c971132fa2b90"),
"name" : {
"en-UK" : "1x1 Rib"
}
}
]
}
],
"name" : {
"en-UK" : "Fabric"
}
}
我正在尝试返回子文档的 _id 并具有以下内容:
db.attributes.aggregate([
{ '$match': {'name.en-UK': 'Fabric'} },
{ '$unwind' : '$values' },
{ '$project': { 'name' : '$values.name'} },
{ '$match': { '$and': [{"name.name.en-UK" : "1x1 Rib"} ] }}
])
这样做的正确方法是什么?
另外,Fabric 的值是一个包含两个项目的数组,source 和 name,但如果我像这样填充它:
> db.attributes.find({'name': {'en-UK': 'Fabric'}}).pretty()
{
"_id" : ObjectId("543261cda14c971132fa2b91"),
"values" : {
"source" : [{ ... }]
"name": [{ ... }]
}
}
我收到以下错误
"errmsg" : "异常:$unwind: 字段路径末尾的值必须是数组"
但是如果我把它放在方括号中,那么它就可以了,所以
> db.attributes.find({'name': {'en-UK': 'Fabric'}}).pretty()
{
"_id" : ObjectId("543261cda14c971132fa2b91"),
"values" : [{
"source" : [{ ... }],
"name": [{ ... }]
}]
}
values 我缺少的是一个由两个对象组成的数组,source 和 name 每个都包含一个数组列表
非常感谢任何建议
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework