我有一个看起来像这样的Mongo数据库结构,我想检索所有血型长度大于2的条目。
{
"_id" : ObjectId("5dba8987b4a39c13bc104a23"),
"contact" : {
"firstName" : "Mark",
"lastName" : "Doe",
"parentsBloodType" : [
{
"type" : "AB+",
},
{
"type" : "A+",
},
],
},
"createdAt" : ISODate("2019-10-31T07:13:11.278Z"),
"updatedAt" : ISODate("2019-11-26T09:59:41.611Z")
}
{
"_id" : ObjectId("5dba898fdsw54c132c104a23"),
"contact" : {
"firstName" : "Helen",
"lastName" : "Fly",
"parentsBloodType" : [
{
"type" : "O-",
},
{
"type" : "AB-",
},
],
},
"createdAt" : ISODate("2019-10-31T08:13:11.278Z"),
"updatedAt" : ISODate("2019-11-26T09:59:41.611Z")
}
我尝试了以下查询:
db.users.find({"contact.parentsBloodType.type" : {$exists:true}, "$expr": { "$gt": [ { "$strLenCP": "$contact.parentsBloodType.type" }, 2 ] } })
但是我得到了这个错误:
Error: error: {
"ok" : 0,
"errmsg" : "$strLenCP requires a string argument, found: array",
"code" : 34471,
"codeName" : "Location34471"
}
如何正确执行此操作?
答案 0 :(得分:1)
此查询将匹配type
字段长度为3或更大的文档:
db.users.find( { "contact.parentsBloodType.type" : { $exists: true }, "contact.parentsBloodType.type": { $regex: /.{3,}/ } } )
笔记:
正则表达式.{3,}
表示长度为3或更大(由.
指定)的任何字符(由点({3,}
)元字符表示)。另外,请参见MongoDB的$regex query operator。