对于一个文档结构为:
{
"_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
MongoDB の update ステートメントは、一度に配列内の最初に一致する要素のみを更新できます。いくつかのアイデア:
1) 再モデル化し、タスクリストを別のテーブルに配置し、reference を使用してそれを参照します。ご要望がたくさんある場合
2) まずクエリを実行して taskList の長さを取得し、次にこの長さに基づいて update ステートメントを記述します。
var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray;var updateObj = {};
for(var i =0;i
}
db.test.update({ }, {$set: updateObj } );
仅有的幸福2017-05-02 09:21:52
ゾウを冷蔵庫に入れる方法は? ドアを開けて、入れて、ドアを閉めて
このデータを取得して、この配列をトラバースして、自分で変更して、このデータを保存する〜
大まかに言うと、こんな感じです
给我你的怀抱2017-05-02 09:21:52
Mongodb は現在、埋め込みデータのバッチ変更をサポートしていません。現在は 1 つずつ更新するだけですが、それをカプセル化する JS メソッドを作成できます
習慣沉默2017-05-02 09:21:52
上記と同様に、js メソッドを使用して各ドキュメントを変更し、保存します。コード例は次のとおりです。被験者は自分でテストする必要があります (mongo シェルで実行)
リーリー