2

我需要从 MongoDB 中不同集合的两个文档中获取数据(其中 1 个公共字段,对 db 没有更改)。我是新手,请帮助我

a = db.users.find(username:'abc@xyz.com')
b = db.tasks.find(username:'abc@xyz.com')

如何获得 a 和 b 合并的变量 c?

请帮忙。这可能是微不足道的,但帮助我。

4

5 回答 5

2

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.

于 2012-06-18T02:32:57.567 回答
2

您可以使用 BSON Api 中的merge()方法。它会给你 b 和 a 的组合并将结果存储在 b 中。在执行此操作之前,您可能希望将 b 复制到 c 中。

于 2012-06-15T19:12:15.280 回答
0

对于数据聚合,您最好熟悉 MongoDB 的 map/reduce 功能。你可以在这里阅读更多关于它的信息。

一旦你弄清楚了,编写 Map(检索数据)和 Reduce(聚合数据)函数就不难了。

于 2012-06-15T19:07:57.090 回答
0

您必须在您的应用程序中执行此操作。不必担心必须运行两个查询,因为它不一定比运行一个复杂的查询要慢。

于 2012-06-15T21:46:03.440 回答
0

我知道这可能不是你的情况,但如果你使用 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]}}
于 2017-11-15T10:23:52.007 回答