Node.js 在同一个findByIdAndUpdate上,使用$push和$pull
在下面的代码中,我试图Node.js 在同一个findByIdAndUpdate上,使用$push和$pull,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,在下面的代码中,我试图findbyidanddupdate,对于更新,我想添加到objectid的两个数组中,并从另一个数组中提取。但是,仅执行更新的第一个命令。因此,$push:{Group1:groupId,Group2:groupId}正在执行,但$pull:{Group3:groupId}没有执行 有没有办法让这两个操作一起工作? 代码 User.findByIdAndUpdate( userId, { $push: {Group1: groupId,
findbyidanddupdate
,对于更新,我想添加到objectid的两个数组中,并从另一个数组中提取。但是,仅执行更新的第一个命令。因此,$push:{Group1:groupId,Group2:groupId}
正在执行,但$pull:{Group3:groupId}
没有执行
有没有办法让这两个操作一起工作?
代码
User.findByIdAndUpdate(
userId,
{
$push: {Group1: groupId, Group2: groupId},
$pull: {Group3: groupId},
},
{'new': true, 'multi':true},
function (err, user) {
if (err)
console.log(err);
else {
res.json({
success: true,
message: 'Success.'
});
}
}
);
模式
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');
var ObjectId = Schema.Types.ObjectId;
//user schema
var UserSchema = new Schema({
username: {type: String, required: true, index:{unique:true}},
phoneNumber: {type: String, required: true, index:{unique:true}},
password: {type: String, required: true, select: false},
name: String,
Group1: [{ type : ObjectId, ref: 'Group' }],
Group2: [{ type : ObjectId, ref: 'Group' }],
Group3: [{ type : ObjectId, ref: 'Group' }],
});
module.exports = mongoose.model('User', UserSchema);
下面是用户对象上的json表示
{
"_id": ObjectId('564a4a24f63d409f526659c4'),
"password": "$2a$10$YYEdr4kavrB2w8dRWHqWC.hAUd1pRzKM6YQt9iLtkrLDk0cRg24Wa",
"phoneNumber": "222",
"username": "222",
"Group1": [
ObjectId('564a2ac4e982c8bb5122a96e')
],
"Group2": [],
"Group3": [],
"__v": 0
}
当我执行代码时,json对象看起来像
{
"_id": ObjectId('564a4a24f63d409f526659c4'),
"password": "$2a$10$YYEdr4kavrB2w8dRWHqWC.hAUd1pRzKM6YQt9iLtkrLDk0cRg24Wa",
"phoneNumber": "222",
"username": "222",
"Group1": [
ObjectId('564a2ac4e982c8bb5122a96e')
],
"Group2": [
ObjectId('564a2acae982c8bb5122a970')
],
"Group3": [
ObjectId('564a2acae982c8bb5122a970')
],
"__v": 0
}
因此,没有删除组3中的objectID。
我当时的想法是,当同时执行拉和推操作时,我没有正确使用FindByid和Update。
这使我倾向于只使用findById,然后在回调中进行更新。与使用findByIdAndUpdate相比,这样做会有缺点吗 这应该行得通。您可以编辑您的问题以显示您的架构和正在更新的文档吗?谢谢您的回答,我为正在更新的对象添加了架构。谢谢,您还可以添加正在更新的文档和groupId
的值吗?正在更新的文档是用户架构,我不知道组Id,它应该是任何数字。不,我指的是您正在更新的特定文档的JSON表示,而这不起作用。