私は7つの配列を持つコレクションがあり、各配列には1000を超えるサブ文書が含まれています。
すなわちMongoDB:複数のフィールドでの単一の更新V/S単一のフィールドでの複数の更新?
{
"_id": 1,
"arr1": [
{ "date": 20100101, "time": 120000, "key": "value1" },
{ "date": 20100401, "time": 121500, "key": "value2" },
...
{ "date": 20161001, "time": 120000, "key": "valueN" },
],
.
.
"arr7": [
{ "date": 20100101, "time": 120000, "key": "value1" },
{ "date": 20100401, "time": 121500, "key": "value2" },
...
{ "date": 20161001, "time": 120000, "key": "valueN" },
]
}
私はすべての配列から特定の日付より古い活動を引きたいです。 iは即ち
db.collection.updateMany({}, { $pull: { arr1: { date: { $lt: 151031 } }, arr2: { date: { $lt: 151031 } }, ... arr7: { date: { $lt: 151031 } } } })
一度に各アレイからのマッチングサブドキュメントを引っ張ってくる単一の更新を実行すべきまたは私が各アレイについて別個に更新を実行しなければなりません。すなわち
db.collection.updateMany({}, { $pull: { arr1: { date: { $lt: 20160101 } } } })
db.collection.updateMany({}, { $pull: { arr2: { date: { $lt: 20160101 } } } })
...
db.collection.updateMany({}, { $pull: { arr7: { date: { $lt: 20160101 } } } })
どちらがより効果的でしょうか?
コレクションには7つの配列のドキュメントが1つしかありませんか?はいの場合、データ設計は本当に悪いです。以前またはそれ以降、あなたは16MB /文書の制限のmongoを実行します... – Robert
いいえ、私は約3200000のような文書を持っていて、それぞれにそのような7つの配列を持っています。このアレイは、時間とともにサイズが増加しています。そして、私は配列から古いサブドキュメントを削除し、私に関連するそのデータだけを残したいと思います。 –