Maison > Questions et réponses > le corps du texte
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 ?
ringa_lee2017-05-17 10:03:33
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 de if(value.Properties.AccountId == null)
? Ou ce que vous voulez juger est AccountId === null
?{"Properties.AccountId":null}
,为什么还要if(value.Properties.AccountId == null)
?或者你想判断的是AccountId === null
?
update
方法的详细说明可以查看文档。文档中的定义是:db.collection.update(query, update, options)
,所以不知道最后的false
和true
本意是想查什么?upsert
和multi
?这样的话应该是:
db.logging.update({'_id':ObjectId(value._id.str)},{$set:{'Properties.AccountId':value.Properties.EnterpriseId}}, {upsert: false, multi: true})
不过你用的是_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 derniers false
et true< /code> signifie Que voulez-vous vérifier ? upsert
et multi
? Dans ce cas, cela devrait être :
rrreee
Mais si vous utilisez la condition _id
, cela ne devrait rien avoir à voir avec multi
. Eh bien, il vaut mieux énoncer clairement votre intention initiale, donc je ne devinerai pas.