我目前正在使用带有Mongoose的Node.js来操作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)。
答案 0 :(得分:0)
虽然杰克·布莱克在评论中部分正确,但由于遇到问题,我想进一步澄清此答案。 就我而言,解决方案如下:
const mongoose = require('mongoose');
await Order.updateMany({},{
$pull: {
'products': mongoose.Types.ObjectId(req.params.id)
},
}).exec();
请注意,ObjectId是不是 new mongoose.mongo.ObjectId()
,而是mongoose.Types.ObjectId()
。