我在一个集合中有10个文档:
>> {'_id':0, 'self':{....}} {'_id':1,'self':{....}} ........ {'_id':9,'self':{....}}
现在我想用他们的计数更新所有文件,这意味着在更新之后,文件将如下所示:
>> {'_id':0, 'count':0, 'self':{....}} {'_id':1,'count':1, 'self':{....}} ........ {'_id':9,'count':9,'self':{....}}
我知道有update({},{'$set':{}})
方法,但我不知道如何使用它来更新每个文档的不同值。有谁知道一些快速的方法来做到这一点?
答案 0 :(得分:0)
假设您在数据库中拥有此数据结构:
{
"_id" : ObjectId("4f9808648859c65d"),
"array" : [
{"text" : "foo", "value" : 11},
{"text" : "foo", "value" : 22},
{"text" : "foobar", "value" : 33}
]
}
您可以使用以下查询更新特定值:
db.foo.update({"array._id" : 1}, {"$set" : {"array.$.text" : "blah"}})
我希望这会对你有所帮助。让我知道。
答案 1 :(得分:0)
我不知道它是否足够快但您可以编写一个脚本来执行此操作并使用eval执行。
示例:
import pymongo
from pymongo import MongoClient
client = MongoClient()
db = client.test_database
db.eval("var count = 0; db.collection_name.find().forEach(function(obj) { obj.count = count; db.collection_name.save(obj); count++ })")
答案 2 :(得分:0)
for index,each in enumerate(myCollection.find({})):
each["count"] = index
id = each["_id"]
each.pop("_id", None)
collection.update({"_id":id},{"$set":each},upsert=True)
注意:@Michael
提到的集合中没有订购文档答案 3 :(得分:0)
假设你在mongodb shell上运行
> db.docs.find().forEach(
function (elem) {
db.docs.update(
{
_id: elem._id
},
{
$set: {
count: elem._id
}
}
);
}
);