在Mongoose中填充ObjectId的数组

时间:2013-01-16 19:01:38

标签: mongoose

我的文档包含一个名为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' 
    ] 
}

我的输入是否有一些特殊的东西可以正确输入?

2 个答案:

答案 0 :(得分: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));

    });

}

希望这有助于其他人。

答案 1 :(得分:1)

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

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

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