2017-10-09 16 views
0

何らかの理由でうまく動作しないような更新呼び出しに苦労しています。いくつかの簡単なコンテキストでは、Sails.js上のWaterline ORMでNode.jsアプリケーションを実行しています。ウォーターラインを使用しているときにドキュメント内のMongoDB配列に項目をプッシュできません

  • 接続-モンゴを:私のpackage.jsonファイルを1として

    、ここで私が使用していたバージョンは1.3.2^

  • のMongoDB:^ 2.2.29
  • 帆:〜0.12を0.4
  • 帆-モンゴ:^ 0.12.3

私は、「製品」と呼ばれるコレクションを持っており、各製品は、データベースに次のようになります。

{ 
    "_id" : ObjectId("59d5f12025423dc0261c911d"), 
    "category" : ObjectId("59a9bcf984d756998eaa22e5"), 
    "status" : "pendingReview", 
    "isDeleted" : false, 
    "events" : [ 
     { 
      "when" : 1507193120, 
      "actor" : "56cc0f76e1a25cde0d2c15ab", 
      "action" : "Submitted product", 
      "note" : "Jeff added this product. It is awaiting review." 
     } 
    ], 
    "productId" : "171005-00000", 
    "createdAt" : ISODate("2017-10-05T08:45:20.538Z"), 
    "updatedAt" : ISODate("2017-10-05T08:45:20.538Z") 
} 

私はユーザーが複数の製品をウェブサイトの訪問者に表示する前に「承認」できるUIを持っています。これを行うには、statusキーを「承認済み」に変更し、各ドキュメントのevents配列にイベントを追加することで、複数のレコードを更新するだけです。イベントは配列の位置0になければなりません。私は、次のコードでこれらのレコードを更新しようとしていますが、動作していないよう:

var moment = require('moment'); 
Products.native(function(error, collection) { 

    if (error) { 
     throw error; 
    } 

    collection.update(
     { _id: ['59d5f12025423dc0261c911d'] }, 
     { 
      $set: { 
       status: 'approved', 
       $push: { 
        events: { 
         when: moment().unix(), 
         actor: req.body.userId, 
         action: 'Approved product', 
         note: req.body.userName + ' approved this product.' 
        } 
       } 
      } 
     }, 
     { multi: true }, 
     function(error, count, status) { 

     if (error) { 
      sails.log.error(error); 
      return res.serverError('Database error. Reference ID: ' + req.referenceId); 
     } 

     return res.ok(count); 
    }); 
}); 

私はこのクエリを実行すると、私はエラーを取得しないと、私は自分のデータベースを確認したときに、レコードは持ってい更新されていません。クエリを実行すると、次のデータが得られます。

{ 
    "ok": 1, 
    "nModified": 0, 
    "n": 0 
} 

ここでは何が起こっていますか?なぜ更新されないのですか?私が正しく理解していれば、クエリはドキュメントを見つけることができますが、更新されていません。あれは正しいですか?はいの場合、どうすれば解決できますか?ありがとう。

答えて

1

$ pushは$ setと同じレベルにする必要があります。

{ 
    $set: { 
     status: 'approved' 
    }, 
    $push: { 
     events: { 
      when: moment().unix(), 
      actor: req.body.userId, 
      action: 'Approved product', 
      note: req.body.userName + ' approved this product.' 
     } 
    } 
} 
+0

それだったこと:彼らは、これは、あなたがこのように変更する必要があります意味の両方の演算子...

です!ありがとうございました! – Nag

関連する問題