Mongodb 根据节点的内容匹配和更新节点
如何在知道doc\u id、par\u id和line\u id的情况下更新右侧节点中的文本字段 我不能使用这个查询,因为我没有对应于par_id和line_id的节点索引Mongodb 根据节点的内容匹配和更新节点,mongodb,Mongodb,如何在知道doc\u id、par\u id和line\u id的情况下更新右侧节点中的文本字段 我不能使用这个查询,因为我没有对应于par_id和line_id的节点索引 你可以这样做- con.db.col.update( {'_id': doc_id}, {'$set': { "pars.?.lines.?.text": "Bar" } } ) > db.collection.insertOne({ ... "doc_id": 1234, ... "pars
你可以这样做-
con.db.col.update(
{'_id': doc_id},
{'$set': { "pars.?.lines.?.text": "Bar" } }
)
> db.collection.insertOne({
... "doc_id": 1234,
... "pars": {
... 4567: {
... "someNode": "...",
... "lines": [
... {
... "line_id": 8901,
... "someOtherNode": "...",
... "text": "Foo"
... },
... ]
... }
... }
... })
{
"acknowledged" : true,
"insertedId" : ObjectId("58ecb95e475838c0db6efd9d")
}
> db.collection.updateOne({
... "doc_id": 1234,
... "pars.4567.lines.line_id": 8901
... }, {
... "$set": {"pars.4567.lines.$.text": "Bar"}
... })
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.collection.findOne({"doc_id": 1234})
{
"_id" : ObjectId("58ecb95e475838c0db6efd9d"),
"doc_id" : 1234,
"pars" : {
"4567" : {
"someNode" : "...",
"lines" : [
{
"line_id" : 8901,
"someOtherNode" : "...",
"text" : "Bar"
}
]
}
}
}
,则需要重新排列架构。现在,您有一个段落数组,每个段落都是一个行数组。我建议将段落制作为字段名为段落的文档,而不是数组。可以将这些行保留为数组,然后使用以下命令按paragraphId和lineId进行更新:
$$是特殊运算符新位置运算符
你可以这样做-
con.db.col.update(
{'_id': doc_id},
{'$set': { "pars.?.lines.?.text": "Bar" } }
)
> db.collection.insertOne({
... "doc_id": 1234,
... "pars": {
... 4567: {
... "someNode": "...",
... "lines": [
... {
... "line_id": 8901,
... "someOtherNode": "...",
... "text": "Foo"
... },
... ]
... }
... }
... })
{
"acknowledged" : true,
"insertedId" : ObjectId("58ecb95e475838c0db6efd9d")
}
> db.collection.updateOne({
... "doc_id": 1234,
... "pars.4567.lines.line_id": 8901
... }, {
... "$set": {"pars.4567.lines.$.text": "Bar"}
... })
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.collection.findOne({"doc_id": 1234})
{
"_id" : ObjectId("58ecb95e475838c0db6efd9d"),
"doc_id" : 1234,
"pars" : {
"4567" : {
"someNode" : "...",
"lines" : [
{
"line_id" : 8901,
"someOtherNode" : "...",
"text" : "Bar"
}
]
}
}
}
可能的重复也值得跟踪JIRA否,不支持两个$运算符。OOPS使用此-:{$set:{pars.lines.$.text:ANY_text____想要的}
db.col.update(
{"_id": doc_id, "par_id": 4567, "pars.lines.line_id":8901},
{$set: { "pars.lines.$$.text":"ANY_TEXT_YOU_WANT" } },
function(){} //callback function)