如果id在数组中,则MongoDB管道$unset字段

如果id在数组中,则MongoDB管道$unset字段,mongodb,mongoose,Mongodb,Mongoose,给定一个类似于下面的条目列表,如果_id在myArray中,我想在管道阶段取消设置platformA美元 { // only show platformA when not in myArray $project: { platformA: 0 } }, 常量myArray=['5f22f9ac6ee02a6707cf0586'] findOne({u id:ObjectId(“5f22f9ac6ee02a6707cf0586”)) 因此,项目完成后,结

给定一个类似于下面的条目列表,如果_id在myArray中,我想在管道阶段取消设置platformA美元

{
    // only show platformA when not in myArray
    $project: {
      platformA: 0
    }
  },
常量myArray=['5f22f9ac6ee02a6707cf0586']

findOne({u id:ObjectId(“5f22f9ac6ee02a6707cf0586”))

因此,项目完成后,结果是

{
    "_id" : ObjectId("5f22f9ac6ee02a6707cf0586")
    "platformB": {
        ...
    }
}
我不明白如果$u id字段不在myArray中,如何访问$u id字段并有条件地将$project platformA访问到0

{
    // only show platformA when not in myArray
    $project: {
      platformA: 0
    }
  },

终于想出了办法

{
  // only show platformA when id is not in myArray
  $project: {
    platformA: {
      $cond: [{$setIsSubset: [['$_id'], myArray]}, 0, 1 ] }
    }
  }
},
{
  $match: {
    $and: [{
      platformA: {$ne: 0}
    }, {
      platformB: {$ne: 0}
    }]
  }
}
,回答你自己的问题很好,如果你满意,那么没关系,但我已经准备了一些关于这方面的研究,所以嘲笑你,可能对其他人有帮助

假设这是ids数组

let myArray = [1,2,3];
与find()一起使用
  • 使用
    $cond
    $in
工作场地:

与聚合()一起使用
工作场所:

@turivishal我已经用一个聚合完成了它(
db.collection.find(
{},
{
  _id: 1,
  name: 1,
  platformB: 1,
  platformA: {
    $cond: [
      {$in: ["$_id", myArray]},
      0,
      "$platformA"
    ]
  }
})
db.collection.aggregate([
  {
    $project: {
      _id: 1,
      name: 1,
      platformB: 1,
      platformA: {
        $cond: [
          {$in: ["$_id", myArray]},
          0,
          "$platformA"
        ]
      }
    }
  }
])