8

配列 (サブドキュメント) から値をプル/削除しようとしています。

ドキュメントの例:

{
   _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 
}]

だから私はすでに問題を抱えているようです。プル呼び出しから返される配列は、プル後に配列に残っているものでなければなりません。アイテム配列からプルしなかった理由がわかりません。これは、ユーザー定義フィールドではなく、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

マングースがデータベースに送信して削除するアイテムは次のとおりです。

ObjectId("5150c64d63773efb1f000002")

私が間違っていることはありますか?_id 以外で削除しようとしていますが、それが可能かどうかはわかりませんが、ドキュメントからはそう見えるようです。

4

1 に答える 1