我正在尝试从数组(子文档)中提取/删除值。
示例文档:
{
_id: 5150a1199fac0e6910000002,
name: 'some name,
items: [{
id: 23,
name: 'item name 23'
},{
id: 24,
name: 'item name 24'
}]
}
我已经从 mongo 中提取了该文档。我在尝试:
var left = object.items.pull({id: 24});
console.log(left)
输出:
[{
id: 23,
name: 'item name 23',
_id: 5150a1199fac0e6910000045
},{
id: 24,
name: 'item name 24',
_id: 5150a1199fac0e6910000002
}]
所以看起来我已经有问题了。从 pull 调用返回的数组应该是 pull 之后数组中剩下的内容。不知道为什么它没有从项目数组中提取。这是否仅支持通过 ObjectId ant 而不是用户定义的字段进行拉取?
我打电话保存:
object.save();
Mongoose 将其记录为查询:
Mongoose: mycollection.update({ _id: ObjectId("5150901ac345824a07000002"), __v: 3 })
{ '$inc': { __v: 1 }, '$pull':
{ attachments: { _id: { '$in': [ ObjectId("5150c64d63773efb1f000002") ] } } } } {}
这说明了为什么我的文档没有被删除。应该删除的数组项的 _id 是:
_id: 5150a1199fac0e6910000002
mongoose 发送到数据库要删除的项目是:
ObjectId("5150c64d63773efb1f000002")
任何想法我做错了什么?我试图用 _id 以外的东西删除,不确定这是否可能,但从文档看来是这样。