推入子数组的对象在MongoDB中保存为字符串

时间:2015-02-05 12:42:45

标签: javascript node.js mongodb mongoose

在将对象推入子数组后,我试图保存使用Mongoose建模的对象。

MyObject.findOne({name:'someName'}, function (err, myObject) {
    if (err) throw err;
    myObject.subArray.push({someKey: 'someString'});
    myObject.save(function(err) {
        if (err) throw err;
        console.log()
    });
}

当我在mongo shell中运行以下查询时:

db.myobjects.find({name:'someName'})

我收到以下回复:

{
    "_id" : ObjectId("54d35cefa5c07abb14955bc3"),
    "name" : "someName",
    "subArray" : [
        "[object Object]"
    ]
}

如您所见,推入subArray的对象已保存为字符串。

MyObject模型的Schema如下:

var MyObjectSchema = new Mongoose.Schema ({
    name : String,
    subArray : [{
        someKey : String
    }]
});

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您的myObject.subArray.push({someKey: 'someString'});

必须是myObject['subArray'] = [{someKey: 'someString'}];

答案 1 :(得分:0)

我能够通过创建子文档架构来解决问题:

var SubArraySchema = new Mongoose.Schema({
    someKey : String
}, {_id : false});

var MyObjectSchema = new Mongoose.Schema ({
    name : String,
    subArray : [SubArraySchema]
});