【发布时间】:2018-11-08 08:48:56
【问题描述】:
这是this 问题的延续。
我正在使用以下代码从集合 C_a 中查找其文本包含单词 StackOverflow 的所有文档,并将它们存储在另一个名为 C_b 的集合中:
import pymongo
from pymongo import MongoClient
client = MongoClient('127.0.0.1') # mongodb running locally
dbRead = client['C_a'] # using the test database in mongo
# create the pipeline required
pipeline = [{"$match": {"$text": {"$search":"StackOverflow"}}},{"$out":"C_b"}] # all attribute and operator need to quoted in pymongo
dbRead.C_a.aggregate(pipeline) #execution
print (dbRead.C_b.count()) ## verify count of the new collection
这很好用,但是,如果我对多个关键字运行相同的 sn-p,结果会被覆盖。例如,我希望集合C_b 包含所有包含关键字StackOverflow、StackExchange 和Programming 的文档。为此,我只需使用上述关键字迭代 sn-p。但不幸的是,每次迭代都会覆盖前一次。
问题:我如何更新输出集合而不是覆盖它?
另外:有没有避免重复的聪明方法,还是我必须在事后检查重复?
【问题讨论】:
-
$out will overwrite the collection if it exists。为什么需要创建新集合?为什么改为查询原始集合不能满足要求?
-
@KevinAdistambha 以上是一个玩具示例。事实上,我有一个非常大的文档集合,我想从关键字列表(超过 200 个)中提取包含关键字的所有文档,并在各个轴上研究它们。为此,我想使用这些特定文档创建一个集合。现在有没有办法做这样的事情?
-
好“真正的 MongoDB 员工”直接将您指向文档,告诉您您的“询问”是不可能的。唯一的选项是 A. 使用
$out的新集合。 B. 在返回的游标上迭代结果并将更新写回。当然,B 意味着将结果和更新“通过网络”传输回来,这似乎正是您想要避免的。您应该注意非常清楚的课程。\