我有一个包含具有以下结构的文档的集合:
[
{
"_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
字段具有数组值的文档?
答案 0 :(得分:1)
根据documentation,您可以使用运营商$type
;允许检查字段的类型。
示例强>:
db.data.find( { x: { $type: "minKey" } } )
要检查Array
是4
还是'array'
。
3.2
和3.6
关于$type
的更改。
答案 1 :(得分:1)
如果您使用的mongodb版本低于3.2
,则为另一种解决方案db.getCollection('testCollection').find( {$where:"typeof this.fieldB !== 'string'"})
虽然您应该将字段值类型更改为原始字符串或数组,但是,这两种评论都不是一个很好的设计。
如果文档具有fieldB
的单个值,您可以将其更改为单个元素的数组。