我正在抓取reddit上的一些链接并将结果存储在MongoDB集合中。这是我的Python脚本中唯一存储数据的行:
reddit_links_collection.update(
{'_id': id}, # query
{ # update rules
'$set': {
'title': title,
'url': url
},
'$push': {'scores': (current_time, score)},
'$push': {'ups': (current_time, ups)},
'$push': {'downs': (current_time, downs)}
},
upsert=True # insert new if no one matches the query
)
我想将值推送到所有三个数组,但只有'downs'
存储在我的数据库中。我错过了什么?
我是MongoDB的新手,但已阅读有关update
和push
的内容,并且无法弄清楚我做错了什么。
答案 0 :(得分:2)
您需要将所有推送放在同一个元素中。在你写的方式中,不一定会推送最后一个 - 它可以是任何一个。
这是一种正确的方法:
reddit_links_collection.update(
{'_id': id},
{
'$set': {
'title': title,
'url': url
},
'$push': {
'scores': (current_time, score),
'ups': (current_time, ups),
'downs': (current_time, downs)
},
upsert=True
)
顺便说一句,同样的方法是使用$ add和其他修饰符。
答案 1 :(得分:0)
因为python dict
的键是不同的,所以同一个键的多次赋值将导致只有最后一个赋值有效。
见这个简短的例子:
>>> {1: 2, 1: 3}
{1: 3}
但我认为您可以使用此语法:
'$push': {'scores': (current_time, score),
'ups': (current_time, ups),
'downs': (current_time, downs)}