var all = db.getCollection('logging').find({"Properties.EnterpriseId":{$ne:null},"Properties.AccountId":null}).sort({"Date":-1});
all.forEach(
function(value,index,arr){
if(value.Properties.AccountId == null){
db.logging.update({'_id':ObjectId(value._id.str)},{$set:{'Properties.AccountId':value.Properties.EnterpriseId}}, false, true)
}
}
);
Le code ci-dessus ne met à jour que 100 éléments à la fois, parfois seulement quelques centaines d'éléments sont mis à jour et 200 000 éléments de données ne peuvent pas être mis à jour en même temps. Pourquoi ?
Il y a quelques choses que je ne comprends pas très bien :
On dirait un script shell, n'est-ce pas ?
Puisqu'il y a
{"Properties.AccountId":null}
dans la condition, pourquoi avons-nous besoin deif(value.Properties.AccountId == null)
? Ou ce que vous voulez juger estAccountId === null
?{"Properties.AccountId":null}
,为什么还要if(value.Properties.AccountId == null)
?或者你想判断的是AccountId === null
?update
方法的详细说明可以查看文档。文档中的定义是:db.collection.update(query, update, options)
,所以不知道最后的false
和true
本意是想查什么?upsert
和multi
?这样的话应该是:不过你用的是
_id
条件应该也没有multi
update
se trouve dans la documentation. La définition dans le document est :db.collection.update(query, update, options)
, donc je ne sais pas quels sont les derniersfalse
ettrue signifie Que voulez-vous vérifier ?
upsert
etmulti
? Dans ce cas, cela devrait être :rrreee
Mais si vous utilisez la condition_id
, cela ne devrait rien avoir à voir avecmulti
. Eh bien, il vaut mieux énoncer clairement votre intention initiale, donc je ne devinerai pas.