1

我正在使用 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 
        }
    }
]
}

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

我尝试使用 "publication.notes": { $not: { $type: 2 } } ,但它们返回与 "publication_notes": { $exists: false } 相同的报告,这让我认为它看到了什么即在字段中作为字符串,即使它为空。

4

1 回答 1

0

请尝试publication_notes : null同时获取 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") }
>
于 2019-01-09T00:46:27.683 回答