Как исключить поле, содержащее текст, и вернуть как ноль, так и не существует?

Я использую Studio3T для запуска MongoDB, но я новичок. У меня есть поле publishing.notes, которое я использую для исключения элементов из отчета. Обычно это поле не используется, поэтому в большинстве документов НЕ заполнено это поле, и мы использовали этот код ниже для отчета. (публикация. примечания - последняя строка)

{
$and: [
    {
        "warehouses.code": "RSDMAIN" 
    }
    ,
    {
        "warehouses.0.quantity": {
            $gt: NumberInt(0) 
        }
    }
    ,
    {
        "images.0.image": {
            $exists: false 
        }
    }
    ,
    {
        "featured_image.slug": {
            $exists: false 
        }
    }
    ,
    {
        "publication.status": {
            $ne: "discontinued" 
        }
    }
    ,
    {
        "publication.status": {
            $ne: "rejected" 
        }
    }
    ,
    {
        "product_type": {
            "$in":[
                "standard" ,
                null 
            ]
        }
    }
    ,
    {
        "publication_notes": {
            $exists: false 
        }
    }
]
}

Проблема в том, что у нас был небольшой процент документов, которые заполняются примечаниями публикации, но он остается нулевым. Я хотел бы, чтобы в моем отчете содержались как нулевые, так и несуществующие документы, но при этом исключались бы документы с реальным текстом. Все, что я пробую, делает меня либо нулевым, либо DNE.

Я попытался поиграться с "publishing.notes": { $not: { $type: 2 } }, но они возвращают тот же отчет, что и "publishing_notes": { $exist: false }, что заставляет меня думать, что он видит все то есть в поле в виде строки, даже если это ноль.

1 ответ

Решение

Пожалуйста, попробуй publication_notes : null получить как ноль, так и не существует

сбор образцов

> db.t44.find()
{ "_id" : ObjectId("5c3543fc01f1171d3864b924"), "a" : "asdaw" }
{ "_id" : ObjectId("5c35440201f1171d3864b925"), "a" : null }
{ "_id" : ObjectId("5c35440601f1171d3864b926") }

найти результат

> db.t44.find({a : null})
{ "_id" : ObjectId("5c35440201f1171d3864b925"), "a" : null }
{ "_id" : ObjectId("5c35440601f1171d3864b926") }
>
Другие вопросы по тегам