如何检查集合的字段是否包含单个值或值数组

时间:2018-06-15 11:40:46

标签: mongodb find

我有一个包含具有以下结构的文档的集合:

[
    {
        "_id" : ObjectId("5b23a2d11bc3e2550e749991"),
        "fieldA" : "field2",
        "fieldB" : [ 
            "field2", 
            "field2", 
            "field2"
        ],
        "fieldC" : "ffield2"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749992"),
        "fieldA" : "field2",
        "fieldB" : "ffield2",
        "fieldC" : "fffield2"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749993"),
        "fieldA" : "field1",
        "fieldB" : [ 
            "field1", 
            "field1", 
            "field1"
        ],
        "fieldC" : "ffield1"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749994"),
        "fieldA" : "field1",
        "fieldB" : "ffield1",
        "fieldC" : "fffield1"
    },

    {
        "_id" : ObjectId("5b23a2d31bc3e2550e749995"),
        "fieldA" : "field3",
        "fieldB" : [ 
            "field3", 
            "field3", 
            "field3"
        ],
        "fieldC" : "ffield3"
    },

    {
        "_id" : ObjectId("5b23a2d31bc3e2550e749996"),
        "fieldA" : "field3",
        "fieldB" : "ffield3",
        "fieldC" : "fffield3"
    }
]

我想只查找那些filedB是数组值的文档。触发查询时,filedB的值未知。只知道一些文档有fieldB作为数组,而其他文档有原始字符串值。

如何查找filedB字段具有数组值的文档?

2 个答案:

答案 0 :(得分:1)

根据documentation,您可以使用运营商$type;允许检查字段的类型。

示例

db.data.find( { x: { $type: "minKey" } } )

要检查Array4还是'array'

@dsharew说了些不错的话。查看您正在使用的mongodb版本,3.23.6关于$type的更改。

enter image description here

答案 1 :(得分:1)

如果您使用的mongodb版本低于3.2

,则为另一种解决方案
db.getCollection('testCollection').find( {$where:"typeof this.fieldB !== 'string'"})

虽然您应该将字段值类型更改为原始字符串数组,但是,这两种评论都不是一个很好的设计。

如果文档具有fieldB的单个值,您可以将其更改为单个元素的数组。