Массив запросов MongoDb с нулевыми значениями

У меня есть объекты в моей коллекции, которые выглядят так:

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

Я хочу запросить те объекты, у которых есть нулевое значение как элемент массива. Запрос

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

не работает, кажется, что только объекты с MyArray равны нулю, например.

{ MyArray:null }

Как мне определить свой запрос?

EDIT: см. один из моих реальных объектов:

{
        "_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})

который не дает результатов.

Ответ 1

Хорошо, я понял это, загрузив своих "нулевых" кандидатов через мой драйвер С#, и оказалось, что значения не равны нулю, но Bson Undefined!! Они отображаются как "нуль" в оболочке! См. http://jira.mongodb.org/browse/SERVER-2426. Это работает:

db.xxx.find({"Attrs":{$type:6}})

Ответ 2

Чтобы найти документы с массивами с нулевыми элементами, запустите:

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

В соответствии с safaribooksonline надлежащее null совпадение выполняется с помощью $in (потому что вы не можете использовать $eq с null). Также, сравнивая с null:

{"something":null}

будет соответствовать документам с полем "что-то", установленным в null, и каждым документом, который вообще не имеет поля "что-то". Таким образом, мы должны убедиться, что ключ существует с помощью $exists.

Ответ 3

(не совсем ответ, но не вписывается в комментарий)

Я не могу воспроизвести проблему, я скопировал ваши данные в оболочку mongo и попробовал в версиях MongoDB 2.2.3, 2.4.1 и здесь в 2.4.0:

Версия оболочки MongoDB: 2.4.0 подключение к: тесту

> db.version()
2.4.0
> db.xxx.insert({
... "_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.xxx.find({"Attrs":null}).pretty()
{
    "_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
    ]
}

Скопируйте приведенную выше последовательность в свою оболочку mongo и опубликуйте результаты здесь.