7

我的文档包含一个名为的字段,该字段clients应该包含一组客户 ID。

{
  "first_name":"Nick",
  "last_name":"Parsons",
  "email":"nick@movementstrategy.com",
  "password":"foo",
  "clients":[
    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010"
  ]
}

我的数据以 JSON 形式传入,我直接将其发送到 Mongo 以创建文档。出于某种原因,clients在我创建时没有被填充,所以我必须手动将它们作为字符串输入。

我的架构相当简单,定义为:

var userSchema = new Schema({
    first_name: {
        type: String,
        trim: true
    },
    last_name: {
        type: String,
        trim: true
    },  
    email: {
        type: String,
        trim: true,
        lowercase: true,
        index: true,
        unique: true,
        required: true
    },
    password: String,
    clients: [Schema.Types.ObjectId]
});

据我了解,我已经正确定义了客户。但是当我进行创建时,我无法让客户端数组填充。事件传递给 mongo 的原始对象看起来不错。

{ 
    first_name: 'Zack',
    last_name: 'S',
    email: 'zack@movementstrategy.com',
    password: 'test',
    clients: [
       '50f5e901545cf990c500000f', 
       '50f5e90b545cf990c5000010' 
    ] 
}

我必须对我的输入做一些特别的事情以使其正确投射吗?

4

2 回答 2

10

简单的修复。检查传入数组是否已填充。如果是这样,我循环遍历每个并将转换后的 ObjectId 版本推送到数组中。显然mongoose.Types.ObjectId('STRING');能够将一般字符串转换为有效的 mongoose id。

// if clients was passed with associated client ids
if (data.clients.length > 0) {

    _.map(data.clients, function(cid) {

        // push client id (converted from string to mongo object id) into clients
        user.clients.push(mongoose.Types.ObjectId(cid));

    });

}

希望这对其他人有帮助。

于 2013-01-16T19:30:08.843 回答
1

接受的答案可能已过时...

如果您要更新此集合,我建议您使用 $push 更新。这种更新方法旨在避免在您所做的只是追加到集合中的数组时执行更新。

http://docs.mongodb.org/manual/reference/operator/update/push/

于 2015-05-19T11:16:31.337 回答