簡體   English   中英

如何檢查集合中是否存在具有多個值的鍵?

[英]How to check if there is a key in collection that has more than one value?

我的收藏看起來像這樣:

{
  {
    _id: 'some value',
    'product/productId': 'some value',
    'product/title': 'some value',
    'product/price': 'unknown'
  },
  {
    _id: 'some value',
    'product/productId': 'some value',
    'product/title': 'some value',
    'product/price': '12.57'
  }
}

我的目標是找出是否有任何產品具有多個價格。 鍵“產品/價格”的值可以是“未知”或數字(例如“12.75”)。 有沒有辦法為此編寫聚合管道,或者我是否需要使用 map-reduce 算法? 我嘗試了這兩種選擇,但沒有找到解決方案。

如果我理解正確,您可以試試這個聚合管道:

首先, _id字段是(或應該是)唯一的,所以我認為您指的是另一個字段,例如id

所以訣竅是按該id分組並將所有價格放入一個數組中。 然后使用$match過濾以僅獲取總價格大於 1 的文檔。

db.collection.aggregate([
  {
    "$group": {
      "_id": "$id",
      "price": {
        "$push": "$product/price"
      }
    }
  },
  {
    "$match": {
      "$expr": {
        "$gt": [ { "$size": "$price" }, 1 ]
      }
    }
  }
])

這里的例子

添加到 Joe 的評論中,如果你想考慮相同的值,你必須使用$addToSet

這里的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM