Mongo 3.2 Boolean如果符合数组

时间:2017-10-23 11:25:17

标签: mongodb mongodb-query aggregation-framework

基本上我试图创建一个布尔字段"焦点"在查询中,如果字段为" focusStores"包含某个商店。

实施例: 如果作为以下焦点的产品存储 - [" AAA"," BBB"]并且如果我使用商店" AAA"作为搜索条件,焦点字段应该是真实的。

这是我目前最好的尝试。任何帮助将不胜感激!

   db.getCollection('Products').aggregate([
      {
        $project: {
          sku:  1,
          focusStores : 1,
          focusTmp : {$focusStores: {$in : 'AAA'}}
        }
      }
    ])

1 个答案:

答案 0 :(得分:1)

对于MongoDB 3.2,请使用$setIsSubset

   db.getCollection('Products').aggregate([
      {
        $project: {
          sku:  1,
          focusStores : 1,
          focusTmp : { $setIsSubset: [ ["AAA"], { "$ifNull": [ "$focusStores", [] } ] }
        }
      }
    ])

您可能阅读了$in这是一个MongoDB 3.4运算符,并且语法不正确。应该是:

   db.getCollection('Products').aggregate([
      {
        $project: {
          sku:  1,
          focusStores : 1,
          focusTmp : { $in: [ "AAA", { "$ifNull": [ "$focusStores", [] ] } ] }
        }
      }
    ])

但只有当你有一个支持版本时。

在这两种情况下,您都会使用$ifNull换行以满足缺失的属性。