使用Mongoose,我无法从另一个集合的数组中提取ObjectId

使用Mongoose,我无法从另一个集合的数组中提取ObjectId,mongoose,Mongoose,我知道存在类似的问题,但这些答案都没有帮助。 我有一个名为Product的模式对象,具有以下字段: categories: [{ type: Schema.Types.ObjectId, ref: "Category" }] 因此,产品可以有一系列的类别。 在mongodb中,产品的外观如下所示: "categories" : [ ObjectId("5dd66ec536199f03339e6ec7") ] 现在,如果有人修改了产品引用的这个类别,我需要从数组中提取它,这就是我无法使用此代码

我知道存在类似的问题,但这些答案都没有帮助。 我有一个名为Product的模式对象,具有以下字段:

categories: [{ type: Schema.Types.ObjectId, ref: "Category" }]
因此,产品可以有一系列的类别。 在mongodb中,产品的外观如下所示:

"categories" : [ ObjectId("5dd66ec536199f03339e6ec7") ]
现在,如果有人修改了产品引用的这个类别,我需要从数组中提取它,这就是我无法使用此代码的原因:

Product.updateMany({}, { $pull: { categories: {_id: "5dd66ec536199f03339e6ec7" } } }, { new: true });
在我看来这是正确的。我还尝试显式地创建ObjectId(Mongoose5.x中不需要),但它给出了相同的结果

如果我直接在mongodb中运行它,它可以工作:

db.products.updateMany({}, { $pull: { categories: ObjectId("5dd66ec536199f03339e6ece") } } )
为了测试,我在一个字符串数组上尝试了同样的方法,效果很好

我正在运行mongoose 5.7.12版

任何人都可以告诉我我做错了什么,或者我是否遇到了错误


提前谢谢

所以我自己想出了这个办法。我把它改成下面的

Product.collection.updateMany({}, { $pull: { categories: mongoose.Types.ObjectId(categoryId) });
我做了两件事: 1.我没有使用{u id:“5dd66ec536199f03339e6ec7”}而是创建了一个ObjectId,这是我以前尝试过的,但似乎没有解决问题。
2.这是我的主要问题。无论出于何种原因,Product.updateMany都不起作用。相反,我不得不使用产品。collection.updateMany

添加
collection
对我也很有效-mongoose v5。奇怪的是,文档没有关于两种不同查询策略之间的区别的信息