相关疑难解决方法(0)

mongodb:如果不存在则插入

每天,我收到一份文件(更新).我想要做的是插入每个尚不存在的项目.

  • 我还想跟踪我第一次插入它们,以及最后一次在更新中看到它们.
  • 我不想要有重复的文件.
  • 我不想删除以前保存过的文档,但不在我的更新中.
  • 95%(估计)的记录每天都未经修改.

我正在使用Python驱动程序(pymongo).

我目前做的是(伪代码):

for each document in update:
      existing_document = collection.find_one(document)
      if not existing_document:
           document['insertion_date'] = now
      else:
           document = existing_document
      document['last_update_date'] = now
      my_collection.save(document)
Run Code Online (Sandbox Code Playgroud)

我的问题是它非常慢(少于100 000条记录需要40分钟,而且我在更新中有数百万条记录).我很确定有内置的东西可以做到这一点,但更新()的文件是mmmhhh ....有点简洁....(http://www.mongodb.org/display/DOCS/Updating)

有人可以建议如何更快地做到这一点?

python bulkinsert mongodb mongodb-query

126
推荐指数
7
解决办法
13万
查看次数

使用upsert更新,但仅在db中的文档的日期字段小于更新的文档时才更新

我试图想出这个逻辑时遇到一些问题.所以,我想做的是:

  • 批量更新一堆帖子到我的远程MongoDB实例但是
  • 如果更新,则仅lastModified在远程集合上的字段小于lastModified我要更新/插入的同一文档中的字段时更新

基本上,我想更新我的文档列表,如果它们自上次更新后已被修改.我可以想到两种蛮力的方法来做到这一点......

首先,查询我的整个集合,尝试手动删除和替换符合条件的文档,添加新文档,然后在删除远程中的所有内容后将所有内容重新插入远程集合​​.

其次,查询每个项目然后决定,如果有一个在远程,如果我想更新它或不.这似乎在处理远程集合时会非常繁琐.

如果相关,我正在使用mondodbnpm包进行数据库操作的NodeJS环境.

mongodb mongodb-query

7
推荐指数
1
解决办法
2777
查看次数

如何使用insert_many安全地忽略重复的键错误

当使用带有pymongo的insert_many时,我需要忽略重复插入,其中重复项基于索引.我已经在stackoverflow上看到了这个问题,但我还没有看到有用的答案.

这是我的代码片段:

try:
    results = mongo_connection[db][collection].insert_many(documents, ordered=False, bypass_document_validation=True)
except pymongo.errors.BulkWriteError as e:
    logger.error(e)
Run Code Online (Sandbox Code Playgroud)

我希望insert_many忽略重复项而不抛出异常(填满我的错误日志).或者,我可以使用单独的异常处理程序,以便我可以忽略错误.我想念"w = 0"......

谢谢

python mongodb pymongo

5
推荐指数
2
解决办法
3348
查看次数

标签 统计

mongodb ×3

mongodb-query ×2

python ×2

bulkinsert ×1

pymongo ×1