Mongoose 从数组中的数组中拉出对象
Posted
技术标签:
【中文标题】Mongoose 从数组中的数组中拉出对象【英文标题】:Mongoose pull object from array inside array 【发布时间】:2017-08-08 03:43:50 【问题描述】:我目前正在使用 Node.js 和 Mongoose 来操作 MongoDB 数据库。我想从数组本身的数组中删除一个对象。
var newTable = new module.Table(
"_id": ObjectId("1"),
"name": "Table1",
"items": [
"_id": ObjectId("11"),
"name": "Item1",
"subscribers": [
"itemId": "111"
,
"itemId": "112"
]
]
).save();
我试过这个查询,但没有效果:
module.Table.update(
"items._id": "11" ,
$pull: "items.$.subscribers": "itemId": "112" ,
"safe": true ,
function (err, obj)
if (err) console.log(filename + " @ module.Table.update(): " + err);
);
请帮我查询一下。
注意 1:ObjectId("xxx") 是本示例的简化引用。
注意2:我发现了这个错误,这是我的错误,查询需要id作为字符串(而不是ObjectId)。
【问题讨论】:
我看到的第一件事是你有 "itemId": ObjectId("112")
。你意识到javascript没有objectId。您可能需要执行以下操作:new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca')
将某些内容转换为对象 ID 以检查数据库中的对象 ID。看起来您的 objectIds 无效。所以我不知道您如何使用这些 objectID。你遇到了什么错误?
你说得对,我忘了说明 ObjectId("xxx") 是这个例子的简化引用。
【参考方案1】:
虽然 jack Blank 在 cmets 中部分正确,但我想进一步澄清这个答案,因为我遇到了麻烦。 就我而言,解决方案如下:
-
在您的脚本中导入猫鼬(注意它的导入方式)。
const mongoose = require('mongoose');
-
然后确保您在更新许多文档的情况下使用 updateMany()
await Order.updateMany(,
$pull:
'products': mongoose.Types.ObjectId(req.params.id)
,
).exec();
注意 ObjectId 不是 new mongoose.mongo.ObjectId()
而是mongoose.Types.ObjectId()
。
【讨论】:
以上是关于Mongoose 从数组中的数组中拉出对象的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通过在 Mongoose 中查询来更新文档数组中的对象?