2017-05-03 81 views
0

子文檔領域給出一個文檔這樣比較兩個MongoDB中

{ 
    _id: '123456', 
    items: [{ 
    itemId: 'abcd', 
    qty: 1 
    qtyMax: 2 
    }, { 
    itemId: 'defg', 
    qty: 3, 
    qtyMax: 3 
    }] 
} 

我想這個文件,因爲items.qty < items.qtyMax其中一個子文檔匹配。

我知道$where,但這裏不適用,因爲它需要手動編寫整個驗證,檢查items並循環遍歷所有元素......我希望有更好的解決方案。

+1

有沒有太多的選擇:$其中(https://docs.mongodb.com/manual/reference/operator/query/where/),[$ CMP(https://開頭docs.mongodb.com/manual/reference/operator/aggregation/cmp/#_S_cmp),[map-reduce](https://docs.mongodb.com/manual/core/map-reduce/) –

回答

0

你有更好的辦法來做到這一點,現在多虧了總管道,使您可以使用計算值:

db.yourDBNameHere.aggregate([ 
    { $project: 
     { isStock: 
      { $lt:["$items.qty", "$items.qtyMax"] } } }, 
    { $match: 
     { isStock: true, }}, 
]) 

這將使用「項目」階段創建一個計算值,它檢查是否或者商品數量少於商品最大數量,那麼在「匹配」階段中,只有符合條件的文檔纔是真實的。 isStock只是一個變量名稱,可以用任何適合你的名稱代替。

https://docs.mongodb.com/manual/core/aggregation-pipeline/