基于id的Mongoose elemMatch和inc查询

时间:2015-10-20 16:11:59

标签: mongodb mongoose mongodb-query

我将如何编写mongoose函数,该函数将根据给定的 userId 查询此mongo查询(我无法将其添加到查询中,也需要这样做)。

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 个答案:

答案 0 :(得分:1)

如果您希望匹配findByIdAndUpdate以外的任何内容,则需要使用findOneAndUpdate代替_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) { ... }
);