我编写了一个创建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
谢谢!
答案 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中的一个对象。)