DATA = [
{
name: 'one',
example: {
arrayOfStrings: ['one', 'two', 'three']
}
}
]
db.getCollection('test').update(
{name: 'one'},
[
{
// From access.roles, if value is not there, then add it to array of strings.
// if it is there, remove it from the array of strings.
}
]
)
类似于下面的内容,但是可以工作。
{
$cond: [
{
$in: ['one', '$example.arrayOfStrings']
},
{$pull: {'$example.arrayOfStrings': 'one'}},
{$push: {'$example.arrayOfStrings': 'one'}},
]
}
当
example.arrayOfStrings
数组中确实存在“one”时,使用 $filter
运算符将其从数组中删除。
否则,请通过在数组中提供“one”来使用
$concatArrays
运算符来执行将元素添加到数组中的操作。
db.collection.update({
name: "one"
},
[
{
$set: {
"example.arrayOfStrings": {
$cond: [
{
$in: [
"one",
"$example.arrayOfStrings"
]
},
{
$filter: {
input: "$example.arrayOfStrings",
cond: {
$ne: [
"$$this",
"one"
]
}
}
},
{
$concatArrays: [
"$example.arrayOfStrings",
[
"one"
]
]
}
]
}
}
}
])