rowsI我正在尝试对记录数组中的每个字段执行mongodb更新.
示例架构如下:
{
"_id" : ObjectId("508710f16dc636ec07000022"),
"summary" : "",
"uid" : "ABCDEF",
"username" : "bigcheese",
"name" : "Name of this document",
"status_id" : 0,
"rows" : [
{
"score" : 12,
"status_id" : 0,
"uid" : 1
},
{
"score" : 51,
"status_id" : 0,
"uid" : 2
}
]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够执行这样的单个更新:
db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)
Run Code Online (Sandbox Code Playgroud)
但是,我正在努力如何执行更新,将所有数组记录更新status_id为1(例如).
以下是我想象它应该如何工作:
db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)
Run Code Online (Sandbox Code Playgroud)
但是我得到错误:
无法使用字符串字段名称附加到数组[$]
我已经尝试了一段时间没有运气.有什么指针吗?
我在mongoose中有一个Person对象,那个person对象有多个东西(每个东西都有一个唯一的ID).
person1 = {
things[{id: 1, name: 'one'},{id:2, name: 'two'}]
}
person2 = {
things[{id: 3, name: 'three'},{id:4, name: 'four'}]
}
Run Code Online (Sandbox Code Playgroud)
然后查询:
Person.findOne({'things.id': 2},{'things.$': 1}, function(err, person) { ...
Run Code Online (Sandbox Code Playgroud)
这很好但我正在搜索所有Person对象(可能有很多).在这种情况下,我知道我需要的人的ID和一个'东西'的唯一ID.通过id获取Person可能要快得多:
Person.findById(personId, function(err, person) { ...
Run Code Online (Sandbox Code Playgroud)
然后循环遍历所有事情以找到正确的:
var thing
person.things.forEach(function(t) {
if (t.id == thingId) {
thing = t;
}
});
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如果有更好的方法.我可以通过id查询Person集合来获取一个Person然后过滤掉我正在寻找的东西(没有丑陋的循环)?
集合...这是我拥有的集合的结构。我需要更新查询方面的帮助。
{
id: 1,
line_items: [
{
id: 43,
review_request_sent: true
}
]
},
{
id: 2,
line_items: [
{
id: 1,
review_request_sent: false
},
{
id: 39
},
]
},
{
id: 3,
line_items: [
{
id: 23,
review_request_sent: true
},
{
id: 85,
review_request_sent: true
},
{
id: 12,
review_request_sent: false
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要更新文档方面的帮助。假设将 review_request_sent 更新为 true,其中 id 为 3,line_item 的对象 id 为 12。
所以最后一个文件变成
{
id: 3,
line_items: [
{
id: 23,
review_request_sent: true
},
{ …Run Code Online (Sandbox Code Playgroud)