【问题标题】:Mongo - Remove Array Element with $pull Does Not Work With $nin (does not exist)Mongodb - 使用 $pull 删除数组元素不适用于 $nin(不存在)
【发布时间】: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

标签: arrays mongodb


【解决方案1】:

我证实这确实有效:

db.users.updateMany({userName:{$nin: [ /@not_these\.com/), /@nor_these\.com/) ]}},{$pull:{'myLinkList': {name: {$in: ['itemA', 'itemB']} } } } )

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多