Arrays 仅当阵列上的命令成功时,才使用增量字段
我有这样一个模式:Arrays 仅当阵列上的命令成功时,才使用增量字段,arrays,node.js,mongodb,mongoose,Arrays,Node.js,Mongodb,Mongoose,我有这样一个模式: var ClassSchema = new Schema({ name: String, kids: [{ type: Schema.Types.ObjectId, ref: 'Kid' }], kidsCount: { type: Number, default: 0} }); 现在我想从数组中拖出一个孩子并减少计数器,只要这个孩子存在于数组中。可以在一个命令中完成吗 我试过这个: Class.findByIdAndUpdate( { _i
var ClassSchema = new Schema({
name: String,
kids: [{ type: Schema.Types.ObjectId, ref: 'Kid' }],
kidsCount: { type: Number, default: 0}
});
现在我想从数组中拖出一个孩子并减少计数器,只要这个孩子存在于数组中。可以在一个命令中完成吗
我试过这个:
Class.findByIdAndUpdate(
{ _id:classId, kids:kidId },
{ $pull:{ kids:kidId }, $inc:{ kidsCount:-1 } },
function(err, updatedClass){
// ...
}
);
但是无论孩子是否被找到,kidsunt
总是递减的。看来你使用了错误的方法。仅将的\u id
作为第一个参数,因此您希望改为使用完整条件对象
Class.update(
{ _id:classId, kids:kidId },
{ $pull:{ kids:kidId }, $inc:{ kidsCount:-1 } },
function(err, numAffected){
// ...
}
);
当然,您不会在回调中获取更新的文档。如果你真的需要的话,你必须在这里找到它。在尼尔的回答之后,我发现哪一个对我来说是更好的解决方案。您在回调中获得修改后的文档,如findbyidanddupdate
:
Class.findOneAndUpdate(
{ _id:classId, kids:kidId },
{ $pull:{ kids:kidId }, $inc:{ kidsCount:-1 } },
function(err, updatedClass){
// ...
}
);
就这样。后来我添加了kids:kidId
条件,我没有考虑这个方法。谢谢,我错过了。接得好。