#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
У меня есть коллекция с документами, подобными этой:
{
"date" : 20200817,
"items" : [
{
"name" : "item1", "values" : ["val1", "val2", "val3"], "values2" : ["val21", "val22", "val23"]
},
{
"name" : "item2", "values" : ["val1", "val4"]
},
{
"name" : "item3", "values" : ["val1", "val3"], "values2" : ["val31", "val33"]
}
]
}
Я хочу получить values
и values2
из items
этого name
, item3
вот так
{"values" : ["val1", "val3"], "values2" : ["val31", "val33"]}
У меня есть этот запрос :
db.test.find(
{'items.name': 'item3'}, {'items.$.values': 1, 'items.$.values2': 1})
но я получаю эту ошибку
Cannot specify more than one positional proj. per query.
Где мой запрос неверен?
Что я могу сделать?
Спасибо
Комментарии:
1. вы не можете с помощью find(), но вы можете сделать этот способ, в противном случае вам нужно использовать
aggregate()
Ответ №1:
//data set queried here for clarity
> db.items5.find().pretty();
{
"_id" : ObjectId("5f5109ef3372ab5da3a605ba"),
"date" : 20200817,
"items" : [
{
"name" : "item1",
"values" : [
"val1",
"val2",
"val3"
],
"values2" : [
"val21",
"val22",
"val23"
]
},
{
"name" : "item2",
"values" : [
"val1",
"val4"
]
},
{
"name" : "item3",
"values" : [
"val1",
"val3"
],
"values2" : [
"val31",
"val33"
]
}
]
}
//actual MongoDB query and query output using aggregate
> db.items5.aggregate([
... {$unwind:"$items"},
... {$match:{"items.name":"item3"}},
... {$project:{"items.values":1,
... "items.values2":2}}
... ]).pretty();
{
"_id" : ObjectId("5f5109ef3372ab5da3a605ba"),
"items" : {
"values" : [
"val1",
"val3"
],
"values2" : [
"val31",
"val33"
]
}
}
>