如果id在数组中,则MongoDB管道$unset字段
给定一个类似于下面的条目列表,如果_id在myArray中,我想在管道阶段取消设置platformA美元如果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”)) 因此,项目完成后,结
{
// 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"
]
}
}
}
])