MongoDB / PyMongo / Python更新无法正常工作

时间:2018-03-07 10:20:41

标签: python mongodb pymongo

我编写了一个创建mongoDB数据库的python程序。 我编写了应该更新此数据库的函数。

我已经在许多论坛帖子中搜索过类似的问题,但似乎没有一个能够解决这个问题。

基本上,我的对象很简单,就像这样。 object{ 'foo' : 'bar' 'baz' : [foobar,foobarbaz,] }

我基本上创建了这些对象,然后,如果它们被重复,我用这样的函数更新它们: db["collection"].update({u'foo' : bar},{'$push':{u'baz' : foobaz}})

我正在尝试将一个字符串附加到列表中,该字符串是字段名称' baz'。

的值。

然而,我不断得到这个对象: {'updatedExisting': False, u'nModified': 0, u'ok': 1.0, u'n': 0}

我尝试用update_one替换更新。

我使用的是python 2.7,Ubuntu 16.04,pymongo 2.7.2, mongodb 3.6.3

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我想出了这个。 因为我得到了正确的格式返回,这意味着我正在尝试与db通信,但是python / javascript通信有些不对劲。 我很确定python不懂javascript。 这就是为什么一切必须明确地陈述为字符串。 例如,使用:

db["collection"].update({u'foo' : bar},{'$push':{u'baz' : foobaz}})

请注意我必须使用'foo'代替foo

值也是如此。 我通过传递给函数的变量更新值。 为了让pymongo正确地将其转换为javascript以与我的mongoDB数据库进行通信,我还必须将其明确地转换为包含str(bar)str(foobaz)的字符串。

除非我使用pymongo,否则这对python来说都不可能。 因此,为了让pymongo做到它的魔力,我必须给它正确的格式。 这似乎并不适用于所有版本的python和pymongo,因为我已经搜索过这个问题,并且没有一个使用pymongo的人不得不使用这种特定的转换。这也可能与我使用python 2.7的事实有关。我知道在某些情况下,python3中的类型检查/转换有点不同。

如果有人能够以更清晰的方式(使用正确的python和javascript术语)解释这一点,那就太棒了。

更新:这似乎适用于任何类型。 例如。为了使用$inc 1运算符递增,我还必须使用int(1)将我的int转换为明确的int。 (虽然这有点奇怪,因为int应该是原始的,但也许它是python中的一个对象。)