MongoDb查询返回不需要的文档



我有一个数据库,其中包含两种结构的文档:

{
"name": "",
"name_ar": "",
"description": "",
"bla1": {
"name": "",
"link": "",
"Logo": ""
},
"bla2": {
"name": "",
"id": ""
}
}

{
"name": "",
"name_ar": "",
"description": "",
"bla1": {
"name": [],
"link": "",
"Logo": ""
},
"bla2": {
"name": "",
"id": ""
}
}

我想查询我的集合,以获取"bla1.name"与某个值完全相等的文档。但是使用以下查询:

{$and: [{'bla1.name': {'$type': 'string'}}, {"bla1.name":'something'}]}

返回包含名称"something"的所有文档(即使"bla1.name"是数组(。

我做错了什么?

来自MongoDB文档:

$type现在可以像处理其他BSON类型一样处理数组。以前的版本只匹配字段包含嵌套数组的文档。

这意味着:如果一个数组至少有一个给定类型的元素,它就会被选中。

如果要将数组排除为类型,则必须扩展查询。由于查询已经匹配字符串,您可以排除字符串的类型选择:

$and: [
// not necessary any more, as this selection is already implied by the last part
// {
//   "bla1.name": {
//     "$type": "string"
//   }
// },
{
"bla1.name": {
$not: {
"$type": "array"
}
}
}, {
"bla1.name": "something"
}
]

参见官方文件:https://docs.mongodb.com/manual/reference/operator/query/type/#behavior

以下是Mongo游乐场上的一个工作演示:https://mongoplayground.net/p/3ri7Bjfrae8

最新更新