#node.js #mongodb
#node.js #mongodb
Вопрос:
Как я могу получить все сведения о «продуктах» в одном массиве и все «заголовки» в одной array.im
используемой mongodb 3.2
версии
getCartProducts: (userId) => {
return new Promise(async (resolve, reject) => {
let cartItems = await db.get().collection(collection.CART_COLLECTION).aggregate([
{
$unwind: "$products",
},
{
$lookup: {
from: collection.PRODUCT_COLLECTION,
localField: "products",
foreignField: "_id",
as: "cartItems"
}
},
{
$match: {
"product": { $ne: [] }
}
}
]).toArray()
resolve(cartItems)
})
}
Это мой текущий результат, который я получаю
[
{
_id: 5f9ff4b1183ac302703b28b1,
user: 5f8fcdd5687bf506e44c9b4a,
products: 5f845d073340762378ba1522,
cartItems: [ [Object] ]
},
{
_id: 5f9ff4b1183ac302703b28b1,
user: 5f8fcdd5687bf506e44c9b4a,
products: 5f9b94d1ab78c11b142646cb,
cartItems: [ [Object] ]
},
{
_id: 5f9ff4b1183ac302703b28b1,
user: 5f8fcdd5687bf506e44c9b4a,
products: 5f9b953bab78c11b142646cd,
cartItems: [ [Object] ]
}
]
Это мой желаемый результат, который мне нужен. Я использую mongodb 3.2
[
{
_id: 5f9ff4b1183ac302703b28b1,
user: 5f8fcdd5687bf506e44c9b4a,
products:[ 5f845d073340762378ba1522,5f9b94d1ab78c11b142646cb,5f9b953bab78c11b142646cd ]
cartItems: [ [Object],[Object],[Object] ]
}
]
Ответ №1:
Добавьте этот этап:
{
$group: {
"_id": "$_id",
user: {
"$first": "$user"
},
cartItems: {
$push: {
$arrayElemAt: [
"$cartItems",
0
]
}
},
products: {
$push: "$products"
}
}
}