[英]MongoDB - Get an unique array from two queries
首先抱歉,如果標題不能反映我真正需要做的事情。
想象一個代表什么產品賣給哪個供應商的集合。 讓我們簡化如下:
{_id, productID, VendorID, Price, Stock}
例如,我們可以:
{_id: 1 ,productID: 1, vendorID: A, price: 0, stock: 0},
{_id: 2 ,productID: 2, vendorID: A, price: 0, stock: 0},
{_id: 3 ,productID: 3, vendorID: A, price: 0, stock: 0},
{_id: 4 ,productID: 4, vendorID: A, price: 0, stock: 0},
{_id: 5 ,productID: 1, vendorID: B, price: 0, stock: 19},
{_id: 6 ,productID: 3, vendorID: B, price: 0, stock: 21}
這個想法是,供應商 A 是超級管理員,負責控制哪些產品可以在市場上銷售。 這就是為什么 A 銷售的所有產品的價格 = 0 且庫存 = 0。
我試圖在同一個查詢中得到的是。 記錄供應商 B 時:
結果將如下所示:
{_id: 2 ,productID: 2, vendorID: A, price: 0, stock: 0},
{_id: 4 ,productID: 4, vendorID: A, price: 0, stock: 0},
{_id: 5 ,productID: 1, vendorID: B, price: 0, stock: 19},
{_id: 6 ,productID: 3, vendorID: B, price: 0, stock: 21}
你知道我怎么能一次完成嗎?
我可以在前端進行過濾,但我更喜歡這樣做,以避免例如分頁問題。
如果您確定A
銷售的所有產品的價格 = 0 且庫存 = 0,則可以執行以下技巧:
db.collection.aggregate({
$match: {
vendorID: {
$in: [
"A",
"B"
]
}
}
},
{
$sort: {
productID: 1,
price: -1
}
},
{
"$group": {
"_id": "$productID",
"product": {
$first: "$$ROOT"
}
}
})
A
) 和目標供應商 ( B
) 擁有的所有產品。productID
和按價格在每組中對產品進行分組,因此A
銷售的產品將是每組中的最后一個A
銷售的產品)。 數據庫文檔將通過$$ROOT
聚合到product
字段中,因此您可以使用 map 它們:
// (javascript)
const productDocuments = aggregationResult.map(row => row.product);
注意:如果B
的產品也有 price = 0 的情況下,即使B
銷售的產品具有相同的 ID,仍然可以提取A
銷售的產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.