相关疑难解决方法(0)

PyMongo upsert抛出"upsert必须是bool的一个实例"错误

我在Python上运行MongoDB的更新.我有这条线:

self.word_counts[source].update({'date':posttime},{"$inc" : words},{'upsert':True})
Run Code Online (Sandbox Code Playgroud)

但它抛出了这个错误:

raise TypeError("upsert must be an instance of bool")
Run Code Online (Sandbox Code Playgroud)

True看起来像是bool的一个例子!

我该如何正确编写此更新?

python mongodb pymongo

68
推荐指数
2
解决办法
4万
查看次数

如何使用mongoengine"插入如果不存在其他更新"?

我正在使用Django中的mongoengine,
这是我的文档定义:

class Location(mongoengine.Document):  
    user_id = mongoengine.IntField(required=True)  
    point = mongoengine.GeoPointField(required=True)
Run Code Online (Sandbox Code Playgroud)

我想这样做:
给定一个user_idpoint:
如果没有文件,有这个user_id,创建一个具有user_idpoint并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?

python django mongodb mongoengine

21
推荐指数
3
解决办法
1万
查看次数

如何使用PyMongo在重复键错误后继续插入

如果我还需要在MongoDB中插入文档

db_stock.update_one(document, {'$set': document}, upsert=True)
Run Code Online (Sandbox Code Playgroud)

.会做的工作(如果我错了,请随时纠正我)

但是,如果我有一份文件清单并希望将它们全部插入,那么最好的方法是什么呢?

这个问题有一个单一记录版本,但我需要它的大量版本,所以它是不同的.

让我重新提出我的问题.我有数百万个文档,其中很少可以存储.如何在几秒钟内将其余的存储在MongoDB中,而不是几分钟/小时?

python mongodb pymongo mongodb-query

8
推荐指数
2
解决办法
1909
查看次数

MongoDB:如果不存在则插入记录,如果存在则忽略

我有一系列MongoDB记录,如:

{"name":"Bob", "gpa":4} {"name":"Sarah", "gpa":3}

我会遇到可能会或可能不会属于同一个人的各种其他记录.如果他们是新人,我想接受他们,如果他们是我们以前见过的人,就不要更新他们.所以,如果我得到{"name":"Jim", "gpa":2},我想接受原样.如果我得到{"name":"Sarah", "gpa":4}(不同的GPA值),我想忽略它.这似乎不是将update"upsert"设置为yes 或者使用"upsert" 的逻辑findAndModify.

/sf/answers/228220331/建议一种方式(第一个字段上的唯一索引,插入记录,立即更新第二个字段)但它已经有几年了,我想知道是否有更好的方法现在只需一步即可完成此操作.

编辑:

接受的答案看起来很棒,但它对我不起作用!首先,我创建了索引(这是使用Java驱动程序):

nameIndex.put("name", 1);
nameIndex.put("unique", true);
queue.ensureIndex(nameIndex);
Run Code Online (Sandbox Code Playgroud)

我可以从命令行看到索引存在且是唯一的.然后,插入一个项目:

DBObject person = new BasicDBObject();
person.put("name", "Bob");
person.put("score", 200000);
queue.insert(person);
Run Code Online (Sandbox Code Playgroud)

之后,得分最高的项目的分数降至零:

BasicDBObject reset = new BasicDBObject();
reset.put("$set", new BasicDBObject("score", 0));
DBObject dbObj = queue.findAndModify(null, new BasicDBObject("score", -1), reset);
Run Code Online (Sandbox Code Playgroud)

所有这些都按预期工作!但是,稍后,可能会再次找到相同的名称,并带有新的分数.当最后一段代码运行时,会创建一个具有不同分数的新项目,这正是我不想要的:

BasicDBObject queueable = new BasicDBObject();
queueable.put("name", "Could be Bob again, could be someone new");
queueable.put("score", 1234);
queue.insert(queueable);
Run Code Online (Sandbox Code Playgroud)

如果我搜索Bob,我会发现:

{ "_id" : …
Run Code Online (Sandbox Code Playgroud)

java upsert mongodb

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

如何在pymongo(python mongodb)中执行get_or_create?

首先,查找是否存在文档匹配查询.

如果是,请使用新数据更新该文档.

否则,将新文档插入数据库.

python mongodb pymongo

6
推荐指数
1
解决办法
5024
查看次数

如果不存在,MongoDB是插入记录的最快方式吗?

我想在MongoDB数据库中插入一条记录,但前提是它还不存在.有些东西告诉我这个代码在性能方面不是最佳的:

if db.foo.find(record).count() == 0:
    db.foo.insert(record)
Run Code Online (Sandbox Code Playgroud)

怎么做最快的方式?

python mongodb nosql mongodb-query

0
推荐指数
1
解决办法
3053
查看次数

标签 统计

mongodb ×6

python ×5

pymongo ×3

mongodb-query ×2

django ×1

java ×1

mongoengine ×1

nosql ×1

upsert ×1