繁体   English   中英

在MongoDB / mongoose中查询字符串时$ or和$ in之间的区别

[英]Differences between $or and $in when querying Strings in MongoDB / mongoose

在构建一个API,我需要匹配包含文件pendingactive的键值status

尝试时

args.status = {
  $or: [
    'active',
    'pending'
  ]
}

我收到一个错误: cannot use $or with string

然而,

args.status = {
  $in: [
    'active',
    'pending'
  ]
}

效果很好。

我希望$or在这里工作。 有人可以提供关于两者之间差异的上下文,以及为什么字符串需要$in吗?

那是因为$ or需要对象数组。 定义一些过滤器的对象,至少要匹配其中的一个过滤器才能返回结果。 对于您的特定情况, $ in是最佳选择。 仍然,如果您想使用$ or ,查询将类似于:

{
  $or: [
    {'args.status' : {$eq: 'active'}},
    {'args.status' : {$eq: 'pending'}}
  ]
}

我建议您坚持使用$ in,因为它最适合您的要求。

您可以查看官方文档以获取有关$ or的更多详细信息

希望这可以帮助 :)

$ or在具有两个以上表达式的ARRAY上执行逻辑OR操作,例如{$or:[{name:"a"},{name:"b"}]}该查询将返回名称为' a”或“ b”。

$ in在数组上工作并返回包含指定数组中任何字段的文档,例如{name:{$in:['a','b']}}此查询将返回name为A或B'。

理想情况下,两者都是一样的,只是语法有所不同。

在您的情况下,您必须修改OR查询语法,并在阵列中添加条件expessions。

{ $or: [
    {
      "args.status": "active"
    },
    {
      "args.status": "pending"
    }
  ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM