У меня есть следующий Монго документ, который является частью более крупного документа под названием атрибутов, который также имеет цвет и размерКак получить MongoDB глубоко Embeded идентификатор документа
> 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
каждый из которых содержит список массивов
Любой совет высоко ценится
Извините, я получаю пустой результат, '{" result ": []," ok ": 1}' – khinester
@khinester. Вы не совсем поняли. В следующий раз удалите символы «tab» из вашего сообщения, когда вы отправляете. Отредактировано с помощью важных строк. –