mongoDB中数组中的字符串字段值长度

Сом*_*Тха 5 arrays mongodb mongodb-query

如何从嵌套在另一个字段中的字段中获取字符长度?它在一个数组中。例如:

{
    "_id" : ObjectId("687e1db"),
    "content" : {
        "ods" : "1102223000241",
        "startDate" : ISODate("2017-05-11T12:00:00Z"),
        "classes" : [
            {
              "driveNumber" : "9999078900007091",
              "number" : "00107605829357",
              "sId" : "0000000005009593"
            }
        ],
         "user" : "SoftLogic",
    },
    "level" : 2
}
Run Code Online (Sandbox Code Playgroud)

并且我想在 中获得一个样本content.classes.number,其中字段中的字符超过 16 个。

提出请求时,我被mongoDB 中的字符串字段值长度引导

要么这个请求不适合这种情况,要么我做错了什么。

db.Basis.find({
    "content.classes.number": { "$exists": true }, 
    "$expr": { "$gt": [ { "$strLenCP": "$content.classes.number" }, 16 ] }})
Run Code Online (Sandbox Code Playgroud)

我收到错误:https : //gyazo.com/d2849406d36364de94d6ea89eff1c2b6

我不仅尝试了这些选项。

UPD mongo 版本 3.4.3

Ash*_*shh 3

content.classes.number是一个数组字段而不是字符串,这就是您的查询无法工作的原因。

这里的一种解决方案是使用$arrayElemAt运算符,但不知道要检查哪个元素。但举例来说,我在这里采用这个0th元素。

db.Basis.find({
  "content.classes.number": { "$exists": true }, 
  "$expr": { "$gt": [{ "$strLenCP": { "$arrayElemAt": ["$content.classes.number", 0] }}, 16 ] }
})
Run Code Online (Sandbox Code Playgroud)

  • 假设数组只有一个元素,这有点跳跃。我知道这个问题只显示一个,但“数组”应该被假定为“数组”* 并被视为这样。另一方面,如果专门询问“第一个数组元素”* 的问题,那么 `$arrayElemAt` 就可以了。但这很可能不是实际情况。有一些运算符可以处理所有可能的数组元素。请参阅对该问题的评论。 (2认同)