我需要从 MongoDB 中不同集合的两个文档中获取数据(其中 1 个公共字段,对 db 没有更改)。我是新手,请帮助我
a = db.users.find(username:'abc@xyz.com')
b = db.tasks.find(username:'abc@xyz.com')
如何获得 a 和 b 合并的变量 c?
请帮忙。这可能是微不足道的,但帮助我。
我需要从 MongoDB 中不同集合的两个文档中获取数据(其中 1 个公共字段,对 db 没有更改)。我是新手,请帮助我
a = db.users.find(username:'abc@xyz.com')
b = db.tasks.find(username:'abc@xyz.com')
如何获得 a 和 b 合并的变量 c?
请帮忙。这可能是微不足道的,但帮助我。
Hey if the user is unique in both collections use function findOne(), because find() returns a cursor. So to achieve a merge of two objects in the mongoDB console you can use the bellow code:
function mergeObjects(a,b) {
res = new Object();
for (attr in a)
res[attr] = a[attr];
for (attr in b)
res[attr] = b[attr];
// only if you wanna save it in a document again
delete res["_id"];
return res;
}
a = db.users.findOne({"username" : 'abc@xyz.com'})
b = db.tasks.findOne({"username" : 'abc@xyz.com'})
c = mergeObjects(a,b)
Hopefully this solve your problems.
您可以使用 BSON Api 中的merge()
方法。它会给你 b 和 a 的组合并将结果存储在 b 中。在执行此操作之前,您可能希望将 b 复制到 c 中。
对于数据聚合,您最好熟悉 MongoDB 的 map/reduce 功能。你可以在这里阅读更多关于它的信息。
一旦你弄清楚了,编写 Map(检索数据)和 Reduce(聚合数据)函数就不难了。
您必须在您的应用程序中执行此操作。不必担心必须运行两个查询,因为它不一定比运行一个复杂的查询要慢。
我知道这可能不是你的情况,但如果你使用 clojure,一个优雅的解决方案是在merge-with
从 mongo 检索文档后使用该函数。
(def a {
:scA {:a [1, 2]}
:scB {:b [3, 4]}
})
; {:scA {:a [1 2]}, :scB {:b [3 4]}}
(def b {
:scA {:c [5, 6]}
:scC {:d [7, 8]}
})
; {:scA {:c [5 6]}, :scC {:d [7 8]}}
(merge-with into a b)
; {:scA {:a [1 2], :c [5 6]}, :scB {:b [3 4]}, :scC {:d [7 8]}}