我将如何编写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
}
);
答案 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) { ... }
);