如何排除包含文本的字段,并且 return 既为空又不存在?

How to exclude a field that contains text, and return both null and does not exist?

我正在使用 Studio3T 运行 MongoDB,但我是初学者。我有一个 publication.notes 字段,我用它来从报告中排除项目,这个字段通常不被使用,所以大多数文档没有填充这个字段,我们已经 运行 宁这个代码下面为报告。 (publication.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 
        }
    }
]
}

问题是我们有一小部分文档确实填充了发布说明,但它仍然是空的。我希望我的报告包含 null 和不存在的文档,同时仍然排除具有实际文本的文档。我尝试的一切都让我要么为空,要么为 DNE。

我试着玩弄 "publication.notes": { $not: { $type: 2 } } ,但他们 return 与 "publication_notes": { $exists: false },这让我觉得它正在将字段中的任何内容视为字符串,即使它为空。

请尝试 publication_notes : null 获取 null 和 not exists

样本收集

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