Mongodb 从文档中获取唯一值并添加到数组
Mongodb get unique value from documents and add to array
我想查询一个集合中的文档与另一个集合中的文档,基于应该包含在两组文档中的值,但是,据我所知 Mongo 不支持一个JOIN,我相信我不能以我想要的方式做我想做的事情。
然后我的替代方法是将文档插入集合 (col1) 中,我想在其中进行查询和更新,其中包含所有唯一 cycle 数字的数组在另一个集合 (col2) 中。
集合 1(第 1 列)
{
"_id" : ObjectId("5670961f910e1f54662c11ag"),
"objectType" : "Account Balance",
"Customer" : "Thomas Brown",
"status" : "unprocessed",
"cycle" : "1234"
},
{
"_id" : ObjectId("5670961f910e1f54662c12fd"),
"objectType" : "Account Balance",
"Customer" : "Luke Underwood",
"status" : "unprocessed",
"cycle" : "1235"
}
集合 2(第 2 列)
{
"_id" : ObjectId("5670961f910e1f54662c1d9d"),
"objectOrigin" : "Xero",
"Value" : "500.00",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "e56e09ef-5c7c-423e-b699-21469bd2ea00"
},
{
"_id" : ObjectId("5670961f910e1f54662c1d9f"),
"objectOrigin" : "Xero",
"Value" : "500.00",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "0a514db8-1428-4da6-9225-0286dc2662c1"
},
{
"_id" : ObjectId("5670961f910e1f54662c1da0"),
"objectOrigin" : "Xero",
"Value" : "-127.28",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "c2d0561c-dc5d-44b9-beaf-d69a3472a2b8"
},
{
"_id" : ObjectId("5670961f910e1f54662c1da1"),
"objectOrigin" : "Xero",
"Value" : "-127.28",
"key" : "grossprofit",
"cycle" : "1235",
"company" : "c3fbe6e4-962a-45f6-9ce3-71e2a588438c"
}
所以我想在集合 1 中创建一个如下所示的文档:
{
"_id" : ObjectId("5670961f910e1f54662c1d9f"),
"objectType" : "Status Updater",
"cycles" : ["1234","1235"]
}
现在我想做的是查询 cycle = cycles 的所有文档并将 "status" 更新为 "processed"。我相信我会用 multi 的 findAndModify 来做到这一点:正确但不完全确定。
完成后,我将简单地删除集合 1 中 objectType 为 "Status Updater" 的任何文档。
如果我没理解错的话,你要
- a) 更新集合 #1 中的所有文档,其中
cycle
的值
存在于集合 #2 中。
- b) 此外,您的
"objectType" : "Status
Updater"
类型的文件只是一个临时文件,用于跟踪所有循环
值。
我想你可以跳过 b) 并使用下面的代码(这段代码需要在 mongo shell 中执行):
# get values of all unique cycle values
# returns an array containing: ["1234", "1235", ...]
values = db.coll2.distinct("cycles", {})
# find all documents where cycles value is in the values array
# and update their status.
db.coll1.update({cycles: {$in: values}}, {$set: {status: "processed"}}, {multi: true})
我想查询一个集合中的文档与另一个集合中的文档,基于应该包含在两组文档中的值,但是,据我所知 Mongo 不支持一个JOIN,我相信我不能以我想要的方式做我想做的事情。
然后我的替代方法是将文档插入集合 (col1) 中,我想在其中进行查询和更新,其中包含所有唯一 cycle 数字的数组在另一个集合 (col2) 中。
集合 1(第 1 列)
{
"_id" : ObjectId("5670961f910e1f54662c11ag"),
"objectType" : "Account Balance",
"Customer" : "Thomas Brown",
"status" : "unprocessed",
"cycle" : "1234"
},
{
"_id" : ObjectId("5670961f910e1f54662c12fd"),
"objectType" : "Account Balance",
"Customer" : "Luke Underwood",
"status" : "unprocessed",
"cycle" : "1235"
}
集合 2(第 2 列)
{
"_id" : ObjectId("5670961f910e1f54662c1d9d"),
"objectOrigin" : "Xero",
"Value" : "500.00",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "e56e09ef-5c7c-423e-b699-21469bd2ea00"
},
{
"_id" : ObjectId("5670961f910e1f54662c1d9f"),
"objectOrigin" : "Xero",
"Value" : "500.00",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "0a514db8-1428-4da6-9225-0286dc2662c1"
},
{
"_id" : ObjectId("5670961f910e1f54662c1da0"),
"objectOrigin" : "Xero",
"Value" : "-127.28",
"key" : "grossprofit",
"cycle" : "1234",
"company" : "c2d0561c-dc5d-44b9-beaf-d69a3472a2b8"
},
{
"_id" : ObjectId("5670961f910e1f54662c1da1"),
"objectOrigin" : "Xero",
"Value" : "-127.28",
"key" : "grossprofit",
"cycle" : "1235",
"company" : "c3fbe6e4-962a-45f6-9ce3-71e2a588438c"
}
所以我想在集合 1 中创建一个如下所示的文档:
{
"_id" : ObjectId("5670961f910e1f54662c1d9f"),
"objectType" : "Status Updater",
"cycles" : ["1234","1235"]
}
现在我想做的是查询 cycle = cycles 的所有文档并将 "status" 更新为 "processed"。我相信我会用 multi 的 findAndModify 来做到这一点:正确但不完全确定。
完成后,我将简单地删除集合 1 中 objectType 为 "Status Updater" 的任何文档。
如果我没理解错的话,你要
- a) 更新集合 #1 中的所有文档,其中
cycle
的值 存在于集合 #2 中。 - b) 此外,您的
"objectType" : "Status Updater"
类型的文件只是一个临时文件,用于跟踪所有循环 值。
我想你可以跳过 b) 并使用下面的代码(这段代码需要在 mongo shell 中执行):
# get values of all unique cycle values
# returns an array containing: ["1234", "1235", ...]
values = db.coll2.distinct("cycles", {})
# find all documents where cycles value is in the values array
# and update their status.
db.coll1.update({cycles: {$in: values}}, {$set: {status: "processed"}}, {multi: true})