Jay*_*ruh 1 arrays object mongodb meteor mongodb-query
我有一种方法可以将新文档插入到集合“项目”中。
//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}
}
});
Run Code Online (Sandbox Code Playgroud)
这将创建一个这样的文档:
"_id" : "home1",
"createdItems" : [
{
"itemId" : "123",
"username" : "Jon Doe",
"home" : "home1"
},
{
"itemId" : "456",
"username" : "Jon Doe2",
"home" : "home1"
},
{
"itemId" : "789",
"username" : "Jon Doe3",
"home" : "home1"
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在我需要能够更新现有字段并稍后将新字段插入到这些对象中。这些对象中的 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}
}
});
Run Code Online (Sandbox Code Playgroud)
或者我必须使用 $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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
或者我是否必须为集合使用另一个数据模式?如果是,当我想让“itemId”、“username”和“home”仍然在一个数组中但“打包在一起”时,我可以选择哪一个?
非常感谢。
如果你想在下面的数组查询中更新对象将工作正常
items.update({
'createdItems.itemId': '123'
}, {
$set: {
'createdItems.$.username': 'Clark Kent'
}
})
Run Code Online (Sandbox Code Playgroud)
您还可以使用相同的查询轻松地向对象添加新字段。
items.update({
'createdItems.itemId': '123'
}, {
$set: {
'createdItems.$.username': 'Clark Kent'
'createdItems.$.newField': 'newFieldValue'
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |