我有這樣的收藏
{
"productId" : ObjectId("someId-1"),
"value" : "Nike",
"key" : "Brand",
},
{
"productId" : ObjectId("someId-1"),
"value" : "Blue",
"key" : "Color",
},
{
"productId" : ObjectId("someId-2"),
"value" : "Nike",
"key" : "Brand",
},
{
"productId" : ObjectId("someId-2"),
"value" : "Red",
"key" : "Color",
},
我想進行查詢以獲取共享這些方面的所有產品 ID
[
{
key: "Brand",
value: "Nike",
},
{
key: "Color",
value: "Blue",
},
]
這應該回傳 productId = someId-1
請注意,我想使用在所有三個欄位(productId、key、value)上創建的索引
uj5u.com熱心網友回復:
你應該使用 $lookup
db.collection.aggregate([
{ "$match": { "key": 'Brand', 'value':'Nike' }},
{ "$lookup": {
"from": "collection",
"localField": "productId",
"foreignField": "productId",
"as": "ids"
}}
])
它將在同一個集合中進行簡單的連接。
參考
uj5u.com熱心網友回復:
我達到了可能是處理此問題的最佳方法的某個點
db.collection.aggregate([
{
$match: {
$or: [
{ key: 'Model', value: 'GV Special' },
{
key: 'Brand',
value: 'Puma'
},
{
key: 'Color',
value: 'Multicolor'
}]
}
},
{
$group: {
_id: "$productId",
products: { $push: "$productId" }
}
},
{
$match: {
products: { $size: 3 }
}
}
])
但這最后一個匹配$size應該是您想要從$or運營商那里匹配的方面的數量。
因此,如果我們只想$or應用 2 個條件,我們會將 更改$size為 2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422863.html
標籤:
