Mongodb 如何检查集合的字段是否包含单个值或值数组
我有一个包含以下结构的文档的集合:Mongodb 如何检查集合的字段是否包含单个值或值数组,mongodb,find,Mongodb,Find,我有一个包含以下结构的文档的集合: [ { "_id" : ObjectId("5b23a2d11bc3e2550e749991"), "fieldA" : "field2", "fieldB" : [ "field2", "field2", "field2" ], "fieldC" : "ffield2" },
[
{
"_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
字段具有数组值的文档?根据,您可以使用运算符$type
;允许检查字段的类型
示例:
db.data.find({x:{$type:“minKey”}})
要检查数组
请键入4
或数组
@德沙鲁说了一些很棒的话。签出您正在使用的mongodb版本,有关
$type
的3.2
和3.6
发生了更改
如果您使用的是mongodb版本低于3.2,请选择另一种解决方案
db.getCollection('testCollection').find( {$where:"typeof this.fieldB !== 'string'"})
一条注释尽管您应该将字段值类型更改为基本字符串或数组,但考虑这两种类型并不是一个好的设计
如果文档对
fieldB
具有单个值,则可以将其更改为单个元素的数组。您使用的是哪个版本的mongodb?mongodb v3.4.5版本不错,这就是我问的原因;)谢谢你的回复。。。我试过了,但没有达到我的预期:)。。。文档中提到:当应用于数组时,$type与指定BSON类型的任何内部元素匹配。例如,当匹配$type:'array'时,如果字段具有嵌套数组,文档将匹配。如果字段本身是数组,则不会返回结果。