在相同的findByIdAndUpdate上,使用$ push和$ pull

时间:2015-11-18 02:39:12

标签: node.js mongodb mongoose

在下面的代码中,我正在尝试findByIdAndUpdate并且为了更新,我想要添加到两个objectIds数组并从另一个数组中提取。但是,仅执行更新的第一个命令。因此$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);

这是User对象上的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
}

因此不会删除Group3中的objectID。 我在这个问题上的想法是,当我在同一时间进行拉动和推动时,我没有正确使用正确的findByIdAndUpdate。 这使我倾向于使用findById然后在回调中进行更新。与使用findByIdAndUpdate相比,这样做会有不利之处吗?

0 个答案:

没有答案