2015-10-20 57 views
0

我要怎麼寫貓鼬功能,將查詢這mongo查詢基於給定的userId(我不能將此添加到查詢,也需要)。貓鼬elemMatch和公司查詢基於ID

db.users.update({ categories : { $elemMatch: { name: "Sport" } } }, 
       {$inc: {"categories.$.points": 6666, points : 7777}}) 

這並不能幫助我。

User.findByIdAndUpdate(
     request.params.userId, 
     //{ $inc: { points: 1 }}, 
     { categories : { $elemMatch: { name: "Spor" }}}, 
     {$inc: {"categories.$.points": 6666, points : 7777}}, 
     //{ safe: true, upsert: true, new : true }, 
     function(err, user) { 
      if (!err) { 
      return reply(user); // HTTP 201 
      } 
      if (11000 === err.code || 11001 === err.code) { 
      return reply(Boom.forbidden("please provide another user id, it already exist!")); 
      } 
      return reply(Boom.forbidden(err)); // HTTP 403 
     } 
    ); 

回答

1

您需要使用findOneAndUpdate而不是findByIdAndUpdate,如果你想匹配而不僅僅是_id任何東西。此處也不需要使用$elemMatch,因爲只能匹配categories數組中的單個字段,因此可以使用簡單的點符號字段匹配。

所以它應該是:

User.findOneAndUpdate(
    { _id: request.params.userId, "categories.name": "Sport" }, 
    { $inc: { "categories.$.points": 6666, points : 7777 }}, 
    { safe: true, upsert: true, new: true }, 
    function(err, user) { ... } 
); 
+0

你是偉大的... –