【发布时间】:2020-05-19 11:24:57
【问题描述】:
我有以下查询,它适用于 $in,但不适用于 $nin。 我正在尝试从不属于用户名包含“@not_these”或“@nor_these”的文档的所有记录中按名称(itemA 和 itemB)删除链接列表项。
db.users.update({userName:{$nin: [ RegExp('@not_these.com'), RegExp('@nor_these.com') ]}},{$pull:{'myLinkList': {name: {$in: ['itemA', 'itemB']} } } } )
如果我将其设为 $in 并明确声明 RegExp(),它会按预期删除数组项。
db.users.update({userName:{$in: [ RegExp('@yes_these.com'), RegExp('@and_these.com') ]}},{$pull:{'myLinkList': {name: {$in: ['itemA', 'itemB']} } } } )
这确实为那些明确声明的用户删除了 itemA 和 itemB 数组列表项。 为什么不能使用第一个示例删除项目“@yes_these”和“@and_these”?执行时似乎什么都不做。
示例文档:
{
"_id": ObjectId('5e34741aa18d8a0c24078b61'),
"myLinkList": [
{
"name": "item",
"created": ISODate('2020-01-31T18:38:18.682Z'),
"managedBy": [
"imm"
]
},
{
"name": "itemA",
"created": ISODate('2020-01-31T18:38:18.682Z'),
"managedBy": [
"imm"
]
},
{
"name": "itemB",
"created": ISODate('2020-01-31T18:38:18.682Z'),
"managedBy": [
"imm"
]
}
],
"userName": "@yes_these.com"
}
更新后(希望如此):
{
"_id": ObjectId('5e34741aa18d8a0c24078b61'),
"myLinkList": [
{
"name": "item",
"created": ISODate('2020-01-31T18:38:18.682Z'),
"managedBy": [
"imm"
]
}
],
"userName": "@yes_these.com"
}
【问题讨论】:
-
您有包含前后数据的示例文档吗?
-
是添加了样本
-
后面将没有最后两个 myLinkList 项。
-
这是使用 MongoDB shell 版本:2.0.4