我构建了一个简单的mongoose模式,如下面的模式
var schema = new mongoose.Schema({
user: {type:String, required:true, unique:true},
msgs: [
{
test1:{url:String, name:String},
test2:String
}
]
});
var model = mongoose.model('test', schema);
现在我尝试插入文档并将一些值推送到文档中,如下所示
var update = {"$push":
{
'msgs':
{
'test1':{'name':'default id','url':'default url' } ,
'test2': 'abc'
}
}
};
model.update({user:'username'},update,{ upsert: true },function(err,data){
if(err) console.error(err);
else console.log(data);
});
由于模型允许upsert,因此文档插入成功,但是当我查看创建的文档时。 结果是
{
'user': 'username',
'msgs':[ { 'test2':'abc', '_id':'xxxxxxxxxx' } ]
}
在我看来,我没有将{test1:{url:'',name:''}}推入数组,我无法弄清楚问题。
答案 0 :(得分:0)
您可以为Url定义单独的模型,并将其嵌入到msgs> test1字段中,如下所示;
var schema = new mongoose.Schema({
user: {type:String, required:true, unique:true},
msgs: [
{
test1:Url,
test2:String
}
]
});
var Url = new mongoose.Schema({
url: {
type: String
},
name: {
type: String
}
});
var Url = mongoose.model('Url',Url);
在插入时,定义一个像;
这样的对象var urlModel = new Url();
urlModel.url = "your_url";
urlModel.name = "your_name";
并尝试upsert操作。这对你有用