0

MongoDB のドキュメントの配列からいくつかの項目を削除しようとしています:

doc1
  items
    item
       id=1
    item
       id=2
    item
       id=3
doc2
  items
    item
      id=4
    item
      id=5
    item
      id=6

これを使用して、たとえばアイテム id=5 を削除します。

(...)
updateItems({'items.id': 5},    { $unset: { 'items.$': 1 }},    { $pull: {'items'    : null} });
(...)
function updateItems(objmatch, objunset, objpull){  
coremodels.getProfileTable(req).update(
    objmatch, 
    objunset,
    {multi: true}, function(err) {
        coremodels.getProfileTable(req).update(
                        objmatch, 
                        objpull,
                        {multi: true}, function(err) {
        console.log('COMPLETED');
});
(...)                       

$unset は正常に動作しますが、$pull は動作していないようです。この操作の最終結果は、空の (Null) 項目 5 です。

$pull が空のドキュメントを削除しない理由はありますか?

よろしくお願いします。

4

1 に答える 1

0

関数updateArrayは 2 つのパラメーターを受け取りますが、3 つ渡しています。私はあなたが{ $pull: {'items' : null} }ドライバーにまったく送っているとは思わない。

追加した:

項目 5 を無効にすると、一致ドキュメントは何にも一致しなくなります。2 回目の cal update では、null をすべて削除するだけの に置き換えobjmatchてみてください。{ }

于 2013-03-21T11:18:45.627 に答える