基于数组内部字符串长度的Mongo查询

时间:2019-12-13 08:29:11

标签: mongodb mongodb-query

我有一个看起来像这样的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"
}

如何正确执行此操作?

1 个答案:

答案 0 :(得分:1)

此查询将匹配type字段长度为3或更大的文档:

db.users.find( { "contact.parentsBloodType.type" : { $exists: true }, "contact.parentsBloodType.type": { $regex: /.{3,}/ } } )


笔记: 正则表达式.{3,}表示长度为3或更大(由.指定)的任何字符(由点({3,})元字符表示)。另外,请参见MongoDB的$regex query operator