我试图使用GUI更新集合(units)中的文档,更新后我想更新集合(users)中的值(user.units,这是一个单元名称数组).如果数组长度只有1个元素,它会被更新,也会显示在数据库中,一切都很好,但当数组中的单元有多个元素时,我会try 通过for循环来更新它,它会显示它已更新,但当我判断数据库时,它仍然没有更新.

我真的不明白为什么在我通过循环更新值时不更新数据库.

Whole Edit and update function:-

 edit_unit: function (req, res, next) {
    var Data = req.body;

    Client_data.Unit.findById(req.params.unitId, function (err, unit) {
        var error = false;
        if (err) {
            error = err;
        } else if (!unit) {
            error = "FATAL: unable to look up Unit #" + req.params.unitId;
        } else {

            switch(req.body.name) {
                case 'Icon':
                    var Icon = unit.Icon;

                    User.find({"Units":Icon}, function (err, users) {
                        if (err)
                        console.log(err);

                        users.forEach(function (u) {
                            if (u.Units.length > 1) {
                            for (var i = 0; i <= u.Units.length; i++) {
                               if(u.Units[i] == Icon) {
                                   u.Units[i] = req.body.value;
                               }
                            }
                            }
                            else {
                                u.Units = req.body.value;
                            }
                            u.save(u);
                        });
                    });
                    unit[req.body.name] = req.body.value;
                    break;
                case 'Description':
                    unit[req.body.name] = req.body.value;
                    break;
                default:
                    unit[req.body.name] = req.body.value;
                    break;
            }
            var data = JSON.stringify(req.body);
            unit.save();

            res.writeHead(200, {
                'Content-Length': data.length,
                'Content-Type':  'application/json'
            });
            res.end(data);
        }
    });
}

req.body:-

{ name: 'Icon',
  value: 'Health Utility 22c',
  pk: '5395ed107cd92dc40eaafb56' 
}

User Schema:-

var userSchema = mongoose.Schema({
UserName:     { type: String, required: true },
Password:     { type: String },
FirstName:    { type: String, required: true },
LastName:     { type: String, required: true },
CompanyName:  { type: String },
PhoneNumber:  { type: Number },
StartDate:    { type: Date,   required: true },
EndDate:      { type: Date,   required: true, default: new Date('9999-12-12')  },
ClientID:     { type: ObjectId, ref: 'Client', default: null },
DepartmentID: { type: ObjectId, ref: 'Department' },
ManagerID:    { type: ObjectId, ref: 'User', default: null},
Units:        [ { type: String, required: true } ],
UserList:      { type: Array, default:[]},
Access:    [{ type: String, enum: ['DEMO', 'USER','MANAGER','ADMINISTRATOR','OWNER']}],
Credentials:  { type: String },
AFTE:         { type: Number},
SessionID:    { type: String, default: null }
}, { safe: true });

推荐答案

可能通知Mongoose数据集已更改如下:

doc.markModified('pathToYourAttribute') 

来自docs http://mongoosejs.com/docs/schematypes.html

person.anything = { x: [3, 4, { y: "changed" }] }; 
person.markModified('anything');

希望有帮助!

Mongodb相关问答推荐

如何在Mongo Aggregate Query中创建集合的对象ID数组,并在列表中查找另一个集合中的ID

如何在MongoDB中对两个数组进行分组?

除非满足某个条件,否则Mongo是否按日期排序?

匹配/筛选/投影对象中数组中数组中的嵌套字段

如何从集合中移除所有匹配的数组项?

CouchDB 或 MongoDB 中的哪一个适合我的需求?

Mongo查找对象内最长数组的查询

获取收集字节使用情况统计信息的pymongo方法?

你如何让 mongo 在远程服务器上运行?

Node.js 和 Passport 对象没有方法 validPassword

MongoDB插入引发重复键错误

如何使用 Node.js 和 mongoose 解决command find requires authentication?

具有多个字段的mongodb文本搜索

django 和 mongodb 是否使迁移成为过go ?

具有简单密码认证的 MongoDB 副本集

在 mongodb 聚合框架中执行 case-statement

mongodb:upserting:仅在插入文档时设置值

如何使用 mgo 从 golang 中的 mongodb 集合中 Select 所有记录

使用 mongoengine 将多文档插入到 mongodb

MongoDB打印两点之间的距离