例如,我在這樣的集合中有資料:
db.inventory2.insertMany([
{ "_id" : 1, "item" : "ABC", price: NumberDecimal("80"), "sizes": [ "S", "M", "L"] },
{ "_id" : 2, "item" : "EFG", price: NumberDecimal("120"), "sizes" : [ ] },
{ "_id" : 3, "item" : "IJK", price: NumberDecimal("160"), "sizes": ["M"] },
])
而且,在添加 $unwind 時,我想選擇大小不為空的專案。
添加 $unwind 后的結果:
db.inventory2.aggregate( [ { $unwind: { path: "$sizes" } } ] )
{ "_id" : 1, "item" : "ABC", "price" : NumberDecimal("80"), "sizes" : "S" }
{ "_id" : 1, "item" : "ABC", "price" : NumberDecimal("80"), "sizes" : "M" }
{ "_id" : 1, "item" : "ABC", "price" : NumberDecimal("80"), "sizes" : "L" }
{ "_id" : 3, "item" : "IJK", "price" : NumberDecimal("160"), "sizes" : "M" }
我的問題是,當我添加 $unwind 時,如何不分離結果項“ABC”。我的預期結果是這樣的:
{ "_id" : 1, "item" : "ABC", "price" : NumberDecimal("80"), "sizes" : ["S", "M", "L"] }
{ "_id" : 3, "item" : "IJK", "price" : NumberDecimal("160"), "sizes" : ["M"] }
之前感謝您的幫助。
uj5u.com熱心網友回復:
根據我從您的問題中了解到的情況,您正在嘗試使用sizes不是空陣列來過濾檔案。
你需要$unwind的不是舞臺,而是$match舞臺。
db.collection.aggregate([
{
$match: {
sizes: {
$ne: []
}
}
}
])
示例 Mongo Playground 1
或者
db.collection.aggregate([
{
$match: {
$expr: {
$ne: [
{
"$size": "$sizes"
},
0
]
}
}
}
])
示例 Mongo Playground 2
uj5u.com熱心網友回復:
這個而不是 $unwind 怎么樣:
db.inventory2.aggregate([
{
$addFields : {
"sizeCount" : {$size: "$sizes"}
}
},
{$match: {"sizeCount" : {$gt: 0}}},
{$project: {"sizeCount" : 0}}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418493.html
標籤:
