mongodb 如何检查集合中是否有多个值的键?

wwtsj6pe  于 2023-01-12  发布在  Go
关注(0)|答案(1)|浏览(113)

我的收藏看起来像这样:

{
  {
    _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'
  }
}

我的目标是查找是否有任何产品具有多个价格。关键字“product/price”的值可以是“unknown”或数字(例如“12.75”)。是否有方法为此编写聚合管道,或者是否需要使用map-reduce算法?我尝试了两种方法,但没有找到解决方案。

tvokkenx

tvokkenx1#

如果我没理解错的话,您可以尝试以下聚合管道:
首先,_id字段是(或者应该是)唯一的,所以我认为您指的是另一个类似id的字段。
因此,诀窍是按id分组,将所有价格放入一个数组中,然后使用$match过滤,只获取价格总和大于1的文档。

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

示例here
添加到Joe的注解中,如果要将相同值视为相同值,则必须使用$addToSet
示例here

相关问题