13

コレクションに次のようなオブジェクトがあります。

{ MyArray:[null, "some value", null] }

配列要素として null 値を持つオブジェクトを照会したいと考えています。クエリ

db.collection.find({"MyArray":null})

MyArray が null であるオブジェクトのみを検索するようです。

{ MyArray:null }

クエリをどのように定義する必要がありますか?

編集: 私の実際のオブジェクトの 1 つを参照してください:

{
        "_id" : BinData(3,"ch9PrWveqU6niB6FGVhIOg=="),
        "PeerGroup" : "male",
        "ProductId" : BinData(3,"weRiKOtXEUSDZHkGHLcwzw=="),
        "CategoryIds" : [
                BinData(3,"BXzpwVQozECLaPkJy26t6Q=="),
                BinData(3,"ox303ZeM50KelvoUbPBJ8Q=="),
                BinData(3,"26ziaY+G9UKMyjmtVkkhcg=="),
                BinData(3,"D2X8vObte0eJHNcDfp2HBw==")
        ],
        "ShopId" : BinData(3,"ZdfPmrlKR0GkLPC4djJuKw=="),
        "BrandId" : BinData(3,"kCHyuyLvgECxPF1nxwr7qQ=="),
        "Created" : ISODate("2012-08-24T07:42:12.416Z"),
        "LastActivity" : ISODate("2013-01-14T19:38:11.776Z"),
        "Price" : 129.9,
        "Sale" : false,
        "Rating" : 11.057340703605368,
        "RatingTimed" : 0.05670431130054035,
        "Available" : null,
        "FreeDelivery" : null,
        "Attrs" : [
                null,
                null,
                null,
                null
        ]
}

そして、次の方法でクエリを実行します。

db.collection.find({"Attrs":null})

結果が得られません。

4

3 に答える 3

35

配列を含むドキュメントを検索するには、null 要素を使用して次のコマンドを実行してください。

db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}})

safaribooksonlineによると、 を使用して適切なnullマッチングが行われ$inます ( では使用できないため)。また、以下との比較:$eqnullnull

{"something":null}

「something」フィールドが null に設定されたドキュメントと、「something」フィールドがまったくないすべてのドキュメントに一致します。したがって、 を使用してキーが存在することを確認する必要があります$exists

于 2015-04-14T11:27:34.960 に答える