質問に含まれていないため、何を試したかはわかりませんが、空の配列を確認する最善の方法は、基本的に0
の場所を確認することです。 インデックスが$exists
と一致しません
:
Inventory.update(
{ "products.rates.0": { "$exists": false } },
{
"$pull": {
"products": { "rates.0": { "$exists": false } }
}
},
{ "multi": true },
function(err,numAffected) {
}
)
.update()
の「クエリ」部分 ステートメントは、"products.rates"
に空の配列があるドキュメントにのみ触れようとすることを確認しています。 。これは必須ではありませんが、次の「更新」ステートメントの条件がtrue
ではないドキュメントでテストすることを回避します。 任意の配列要素に対して、したがって、物事を少し速くします。
実際の「更新」部分は、 $pull
に適用されます。
"products"
で 「内部」"rates"
であるアイテムを削除する配列 空の配列です。したがって、$pull
内の「パス」 実際に"products"
の内部を見ています とにかくコンテンツなので、ドキュメント全体ではなく、それに関連しています。
当然$pull
1回の操作で一致するすべての要素を削除します。 "multi"
>
ステートメントを使用して複数のドキュメントを本当に更新する場合にのみ必要です