【问题标题】:$pull works in mongosh but not in mongoose$pull 在 mongosh 中有效,但在 mongoose 中无效
【发布时间】:2021-12-14 15:14:22
【问题描述】:

用户架构:

const UserSchema = new mongoose.Schema(
  {
    contacts: {
      type: Array,
      default: [],
    }
  }

);

module.exports = mongoose.model("User", UserSchema);

MongoDB 中的数据

{
    "_id": ObjectId("6171fbcd85279d467c9b5be9"),
    "contacts":[
        {
            "_id": ObjectId("61a7b499455e053ae4e4baeb"),
            "firstName":"Johnny",
            "lastName":"Cool",
            "occupation":"Programmer",
            "company":"Cool Comp."
        },

        {
            "_id":ObjectId("61a7b4be455e053ae4e4baec"),
            "firstName":"Evan",
            "lastName":"Evernost",
            "occupation":"Manager",
            "company":"Best Comp."
        }
    ]
}

此删除查询在 mongosh 中有效,联系人已从数据库中删除

db.users.updateOne(
  {'_id':ObjectId('6171fbcd85279d467c9b5be9')},
    {$pull: 
      {'contacts':
        {'_id': ObjectId('61a7b499455e053ae4e4baeb')}
      }
    }
)

生成的数据如下所示:

{
    "_id": ObjectId("6171fbcd85279d467c9b5be9"),
    "contacts":[
        {
            "_id":ObjectId("61a7b4be455e053ae4e4baec"),
            "firstName":"Evan",
            "lastName":"Evernost",
            "occupation":"Manager",
            "company":"Best Comp."
        }
    ]
}

但是,当我在使用 npm 的 mongoose 库中运行此查询时,命令“成功”但联系人并未从数据库中删除。

User.updateOne(
  {'_id': mongoose.types.ObjectId('6171fbcd85279d467c9b5be9')},
    {$pull: 
      {'contacts':
        {'_id': mongoose.types.ObjectId('61a7b499455e053ae4e4baeb')}
      }
    }
)

生成的数据如下所示

{
    "_id": ObjectId("6171fbcd85279d467c9b5be9"),
    "contacts":[
        {
            "_id": ObjectId("61a7b499455e053ae4e4baeb"),
            "firstName":"Johnny",
            "lastName":"Cool",
            "occupation":"Programmer",
            "company":"Cool Comp."
        },

        {
            "_id":ObjectId("61a7b4be455e053ae4e4baec"),
            "firstName":"Evan",
            "lastName":"Evernost",
            "occupation":"Manager",
            "company":"Best Comp."
        }
    ]
}

而不是这个:

{
    "_id": ObjectId("6171fbcd85279d467c9b5be9"),
    "contacts":[
        {
            "_id":ObjectId("61a7b4be455e053ae4e4baec"),
            "firstName":"Evan",
            "lastName":"Evernost",
            "occupation":"Manager",
            "company":"Best Comp."
        }
    ]
}

不确定是什么问题。

【问题讨论】:

    标签: mongoose mongoose-schema mongo-shell


    【解决方案1】:

    因为 updateOne 是一个异步函数,所以只需添加 await 关键字就可以了

    await User.updateOne(
      {'_id': mongoose.types.ObjectId('6171fbcd85279d467c9b5be9')},
        {$pull: 
          {'contacts':
            {'_id': mongoose.types.ObjectId('61a7b499455e053ae4e4baeb')}
          }
        }
    )
    

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2021-03-04
      • 2015-07-21
      • 2015-08-03
      • 2015-11-13
      相关资源
      最近更新 更多