6

col私は、このようなドキュメントを持つという名前のmongoDBコレクションを持っています

{
  {
    intField:123,
    strField:'hi',
    arrField:[1,2,3]
  },

  {
    intField:12,
    strField:'hello',
    arrField:[1,2,3,4]
  },

  {
    intField:125,
    strField:'hell',
    arrField:[1]
  }
}

colここでsize、配列フィールドが 2 未満のドキュメントをコレクションから削除したいと考えています。

だから私はこのようなクエリを書きました

db.col.remove({'arrField':{"$size":{"$lt":2}}})

このクエリは何もしません。確認したdb.col.find()ところ、すべてのドキュメントが返されました。このクエリの何が問題になっていますか?

4

4 に答える 4

5

のドキュメントから$size:

$size を使用してサイズの範囲を検索することはできません (たとえば、複数の要素を持つ配列)。

ドキュメントでは、この種のことを試したい場合は、配列内のアイテムの数を含む別のサイズ フィールド (この場合は arrFieldSize) を維持することをお勧めします。

于 2012-05-03T22:05:02.063 に答える
4

一部のクエリでは、(n)または条件を使用して、必要なすべてのカウントを一覧表示したり、除外したりすることが可能な場合があることに注意してください。

あなたの例では、次のクエリは2つ未満の配列エントリを持つすべてのドキュメントを提供します。

db.col.find({
  "$or": [
    { "arrField": {"$exists" => false} },
    { "arrField": {"$size" => 1} },
    { "arrField": {"$size" => 0} }
  ]
})
于 2012-06-27T13:58:03.710 に答える