Я хотел бы знать запрос, в котором я мог бы получить конкретный поддокумент, используя его ObjectId или даже имя «store», если проще, используя метод агрегации.Я почти уверен, что могу использовать $ project, но я не уверен, как применить это к ObjectId.
Я могу использовать метод find, но мне нужно, чтобы он был в методе агрегации, чтобы mongo возвращал мне имена элементов, а не ObjectId.
db.stores.aggregate([
{$unwind: '$inventory'},
{$lookup: {
from: 'items',
localField: 'inventory.item',
foreignField: '_id',
as: 'itemsData'
}},
{$unwind: '$itemsData'},
{$group:{
_id: "$_id",
inventory: { $push: "$inventory" },
itemsData: { $push: "$itemsData" }
}}
]).pretty()
В моей коллекции пять магазинов.Этот запрос возвращает все пять документов, таких как приведенный ниже код, всего пять раз.Но я хочу указать магазины, которые будут возвращены, используя его ObjectId.
{
"_id" : ObjectId("5cc0d6ad1ea502abb28b52cc"),
"inventory" : [
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a4"),
"amount" : 9
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a1"),
"amount" : 5
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a7"),
"amount" : 2
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b529e"),
"amount" : 5
}
],
"itemsData" : [
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a4"),
"item" : "beans",
"price" : NumberDecimal("53,75")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a1"),
"item" : "bananas",
"price" : NumberDecimal("5.00")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a7"),
"item" : "watermelon",
"price" : NumberDecimal("3.50")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b529e"),
"item" : "broccoli",
"price" : NumberDecimal("5.50")
}
]
}
Я хочу, чтобы запрос возвратил код, аналогичный приведенному выше, с одним хранилищем, а не пятью.Я не уверен, как использовать $ project, если он подходит для этой задачи.