我已经看过这些帖子了:
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
答案 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);