我有两个系列:
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);
非常感谢!
答案 0 :(得分:0)
当然,这不能在单个查询中完成。您无法在同一查询中阅读文档A并修改文档B.
您甚至无法在单个文档中执行此操作,即update key 'a' with contents of key 'b'
无法正常工作。
我会读取Collection B中的所有文档,然后使用该数据更新Collection A.您可能需要逐个文档更新。