我有一个方法可以将新文档插入集合“items”。
//Example data of variables
var home = "home1";
var itemId = "123";
var username = Meteor.user().username;
//Upsert command
items.upsert({
'_id': home
}, {
$push: {
'createdItems': {itemId, username, home}
}
});
这会创建一个这样的文档:
"_id" : "home1",
"createdItems" : [
{
"itemId" : "123",
"username" : "Jon Doe",
"home" : "home1"
},
{
"itemId" : "456",
"username" : "Jon Doe2",
"home" : "home1"
},
{
"itemId" : "789",
"username" : "Jon Doe3",
"home" : "home1"
}
]
}
现在我需要能够更新现有字段并稍后在这些对象中插入新字段。这些对象中的itemId是“引用”。所以我需要一个mongoDB函数,它通过使用“itemId”作为查询运算符来插入或更新字段。像这样:
//update a field
items.upsert({
'itemId': "123"
}, {
$set: {
'createdItems': {username: "Clark Kent"}
}
});
//insert new field
items.upsert({
'itemId': "123"
}, {
$set: {
'createdItems': {Value: 1000}
}
});
或者我必须使用$ push?这些命令无法提供我需要的结果。最后,文档应如下所示:
"_id" : "home1",
"createdItems" : [
{
"itemId" : "123",
"username" : "Clark Kent",
"home" : "home1",
"Value" : 1000
},
{
"itemId" : "456",
"username" : "Jon Doe2",
"home" : "home1"
},
{
"itemId" : "789",
"username" : "Jon Doe3",
"home" : "home1"
}
]
}
或者我是否必须为集合使用其他数据模式?如果是的话,当我想要“itemId”时,我可以选择哪一个,用户名“和”home“仍然在一个数组中但是”打包在一起“?
非常感谢。
答案 0 :(得分:1)
如果你想更新下面的数组查询中的对象将工作正常
items.update({
'createdItems.itemId': '123'
}, {
$set: {
'createdItems.$.username': 'Clark Kent'
}
})
您还可以使用相同的查询轻松地向对象添加新字段。
items.update({
'createdItems.itemId': '123'
}, {
$set: {
'createdItems.$.username': 'Clark Kent'
'createdItems.$.newField': 'newFieldValue'
}
})