首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB:使用$where - ReferenceError的数组大小

MongoDB:使用$where - ReferenceError的数组大小
EN

Stack Overflow用户
提问于 2021-06-01 15:40:56
回答 1查看 37关注 0票数 1

对于MongoDB 4.4.6

对于具有数组的集合-如果我使用

代码语言:javascript
复制
db.fighters.find({"close_attacks": {$size: 3}},
                 {"_id": 0, "biography": 0})
           .pretty()
db.fighters.find({"close_attacks.2" : { $exists: true }},
                 {"_id": 0, "biography": 0})
           .pretty()
db.fighters.find({"close_attacks.3" : { $exists: true }},
                 {"_id": 0, "biography": 0})
           .pretty()

所有的人都和平地工作

我希望使用>=# (即>=3),我做了一项研究,在许多文章中出现了两个选项,一个已经显示在上面:使用数组和#>=3的索引,另一个是使用$where

因此,在Compass中,通过_mongosh测试版,我尝试了:

代码语言:javascript
复制
db.fighters.find({$where: "this.close_attacks.length >= 3"},
                 {"_id": 0, "biography": 0})
           .pretty()

并产生

代码语言:javascript
复制
MongoError: TypeError: this.close_attacks is undefined :
@:1:15

如果我删除this

代码语言:javascript
复制
db.fighters.find({$where: "close_attacks.length >= 3"},
                 {"_id": 0, "biography": 0})
           .pretty()

它产生了

代码语言:javascript
复制
MongoError: ReferenceError: close_attacks is not defined :
@:1:15

少了什么或者错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 15:44:19

可以使用$expr运算符使用聚合运算符$gte$size

聚合方案首选 从MongoDB 3.6开始,$expr操作符允许在查询语言中使用聚合表达式。

代码语言:javascript
复制
db.fighters.find({
  $expr: {
    $gte: [{ $size: "$close_attacks" }, 3]
  }
},
{"_id": 0, "biography": 0}).pretty()

MongoError:$size的参数必须是数组,但类型为:

您可以通过使用$type检查其类型来避免此类错误,

代码语言:javascript
复制
db.fighters.find({
  $and: [
    { close_attacks: { $type: "array" } },
    {
      $expr: {
        $gte: [{ $size: "$close_attacks" }, 3]
      }
    }
  ]
},
{"_id": 0, "biography": 0}).pretty()

注: 从MongoDB 4.4开始,$where不再支持带作用域的不推荐BSON类型JavaScript代码(BSON类型为15)。$where运算符只支持BSON类型字符串(BSON 2)或BSON类型JavaScript (BSON 13)。自JavaScript 4.2.1以来,不再推荐使用$where范围为BSON类型的MongoDB。

这两个块在$where中可用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67791958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档