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

Object pushed into subarray saved as string in MongoDB

在将对象推入子数组后,我正在尝试保存使用 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()
    });
}

当我运行下面的查询在mongoshell:

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

我收到以下回复:

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

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

MyObject 模型的架构如下:

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

我做错了什么?

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

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

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

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

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