将一个集合中的值替换为其他集合MongoDB中的相应值

时间:2015-03-29 16:50:20

标签: java mongodb

我有两个系列:

Collection A
----------------
...
"sometag"  "1"
...


Collection B
----------------
"1" "one"
"2" "two"

我想将集合A中所有文档中的所有sometag值替换为B中的相应值。

所以,sometag“1”应改为sometag“one”,sometag“2”改为sometag“two”

这可以在一个查询中完成吗?那么,没有迭代B中的所有出现?

我似乎无法弄清楚这一点。但是,迭代B然后执行查询。

/*
 * tarTag: the target tag in A (e.g. "sometag")
 * current: an iterator over coll B
 * keyTag: the key in B (e.g. "1")
 * valTag: the corresponding value in B (e.g. "one")
 */
BasicDBObject searchQuery = new BasicDBObject(tarTag,        current.get(keyTag));
BasicDBObject update = new BasicDBObject("$set", 
                                        new BasicDBObject(tarTag, current.get(valTag)));
collectionA.updateMany(searchQuery, update);

非常感谢!

1 个答案:

答案 0 :(得分:0)

当然,这不能在单个查询中完成。您无法在同一查询中阅读文档A并修改文档B.

您甚至无法在单个文档中执行此操作,即update key 'a' with contents of key 'b'无法正常工作。

我会读取Collection B中的所有文档,然后使用该数据更新Collection A.您可能需要逐个文档更新。