Maison > Questions et réponses > le corps du texte
对于一个文档结构为:
{
"_id" : ObjectId("57133995fb5f8930d0e9b81a"),
"taskList" : [{
"taskId" : NumberLong(1),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(2),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(3),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
}]
}
taskList 长度不确定
如何批量对数组内容进行修改呢?
例如批量修改 "_id" : ObjectId("57133995fb5f8930d0e9b81a") 的 taskList 内嵌元素 的 state 字段 为 'ST02'
@Mongoing中文社区
習慣沉默2017-05-02 09:21:52
L'instruction update de MongoDB ne peut mettre à jour que le premier élément correspondant du tableau à la fois. Quelques idées :
1) Remodelez, placez la liste de tâches dans un autre tableau, puis utilisez la référence pour la référencer. Si tu as beaucoup de besoins
2) Effectuez d’abord une requête pour obtenir la longueur de taskList, puis épelez l’instruction de mise à jour en fonction de cette longueur :
var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray;
var updateObj = {};
for(var i=0;i<length;i++){
updateObj["taskList."+ i+".stat"] = "ST02";
}
db.test.update( { }, {$set: updateObj } );
仅有的幸福2017-05-02 09:21:52
Comment mettre un éléphant au réfrigérateur ? Ouvrez la porte, mettez-la dedans, fermez la porte
Idem. Récupérez ces données, parcourez ce tableau et modifiez-les vous-même ~
De manière générale, c'est comme ça
给我你的怀抱2017-05-02 09:21:52
Mongodb ne prend actuellement pas en charge la modification par lots des données intégrées. Actuellement, il ne se met à jour qu'une par une, mais vous pouvez écrire une méthode JS pour l'encapsuler
.習慣沉默2017-05-02 09:21:52
Comme ci-dessus, utilisez la méthode js pour modifier chaque document et enregistrez-le. L'exemple de code est le suivant. Le sujet doit le tester par lui-même (exécuter dans le shell mongo)
changeState = function(doc){
taskList = doc.taskList;
for(var i in taskList){
taskList[i].state = 'ST02';
}
db.test.save(doc)
}
db.test.find({"_id" : ObjectId("57133995fb5f8930d0e9b81a")}).forEach(changeState)