我正在更新我的收藏中的记录:
for document in myDB.find():
if compliesToSomeRule(document):
myDB.update({'_id':document['_id']}, {'$set':{'something':'somevalue'}})
这是最有效的方法吗?
由于重新查询索引,我必须将更新的第一个参数设置为文档的_id
,这似乎很奇怪?
有没有办法更新“就地”可以这么说?
答案 0 :(得分:1)
您所做的更新命令的第一部分基本上是您所需的“compliesToSomeRule”方法。例如,假设compliesToSomeRule定义如下:
def compliesToSomeResult(doc):
if doc['a'] == 0:
return True
else:
return False
然后你可以跳过这个集合而只是做
myDB.update({ 'a' : 0 }, {'$set' : { 'x' : 'y' }})
然后,您将更新文档(第二个)应用于集合中字段等于0的所有文档。
另一个例子:如果你想找到'a'>所有的文件0你可以做到
myDB.update({ 'a' : { '$gt' : 0 }}, {'$set' : {'x' : 'y'}})
更新调用的第一部分“查询”部分是指定接收更新的文档的方式。第二部分定义了实际更新的内容。
以下是您在查看此资料时可能会发现有用的文档:http://docs.mongodb.org/manual/applications/update/
答案 1 :(得分:0)
您正在更新。更新的第一个参数是一个find子句,它就是如何识别要更新的记录。
修改
MongoDB是否处理缓存? 是。 MongoDB保持最佳状态 最近在RAM中使用的数据。如果您已为自己创建了索引 查询和您的工作数据集适合RAM,MongoDB服务于所有 来自记忆的查询。
MongoDB没有实现查询缓存:MongoDB提供所有查询 直接来自索引和/或数据文件。
此外,您的用户名很棒:)
答案 2 :(得分:0)
我想你想看一下“$ where”关键字。 http://docs.mongodb.org/manual/reference/operator/where/它允许您基于javascript函数进行查询,因此一切都在数据库上进行。这可能会慢一些。
答案 3 :(得分:-1)
如果您需要查找特定文档然后添加内容:
flag=db.foo.find({"_id":333})
try:
if flag[0]['_id']:
db.foo.update({"_id":333},{"$set":{"name":"mongo"}})
except:
print "none"
但是如果您需要搜索所有文档并向所有文档添加内容:
flag=db.foo.find()
for row in flag:
db.foo.update({"_id":flag['_id']},{"$set":{"name":"mongo"}})