MongoDB获取字段值的长度

时间:2017-01-02 13:07:25

标签: mongodb ubuntu

我已经看过这些帖子了:

String field value length in mongoDB

Select string length in mongodb

但我的问题不同了。 当我运行此查询时:

db.usercollection.find({$where: "this.profile.name.length < 20"}).limit(2);

我收到以下错误:

Error: error: {
    "ok" : 0,
    "errmsg" : "TypeError: this.profile is undefined :\n_funcs2@:1:24\n",
    "code" : 139
}

当我运行此查询时:

db.usercollection.find({"profile.name": {$exists: true}, $where: "this.profile.name.length <20"}).limit(2); 

没有错误,但是空结果,虽然我的集合有2个文件,其中profile.name&lt; 20

MongoDB shell版本:3.2.11

2 个答案:

答案 0 :(得分:1)

有一个文档,其中profile键(嵌入文档)不存在,并且javascript表达式抛出错误,因为它试图访问对象的未显示属性:

db.usercollection.find({$where: "this.profile.name.length < 20"}).limit(2);

您的第二个查询正常,因为它匹配profile.name存在的所有文档:

db.usercollection.find({"profile.name": {$exists: true}, $where: "this.profile.name.length <20"}).limit(2); 

第二个查询应返回所需的结果。

答案 1 :(得分:-2)

可以在where子句本身检查profile.name

db.usercollection.find({$where: "this.profile && this.profile.name && this.profile.name.length < 20"}).limit(2);