質問に含まれていないため、何を試したかはわかりませんが、空の配列を確認する最善の方法は、基本的に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">
ステートメントを使用して複数のドキュメントを本当に更新する場合にのみ必要です