mongodb - 如何使用具有一对属性的 $in 运算符
问题描述
考虑这个集合
/* 1 */
{
"key" : 1,
"b" : 2,
"c" : 3
}
/* 2 */
{
"key" : 2,
"b" : 5,
"c" : 4
}
/* 3 */
{
"key" : 3,
"b" : 7,
"c" : 9
}
/* 4 */
{
"key" : 4,
"b" : 7,
"c" : 4
}
/* 5 */
{
"key" : 5,
"b" : 2,
"c" : 9
}
我想使用 $in 运算符并编写一个查询来返回文档,例如 (b, c) IN ((2, 3), (7, 9))。它的意思是“同时返回 b 为 2 且 c 为 3 的所有行,或者 b 为 7 且 с 为 9 的所有行”。
如何使用 $in 运算符来使用多个属性值。
如果我使用以下查询
db.getCollection('test').find({
$and:[
{b:{$in:[2,7]}},
{c:{$in:[3,9]}}
]
})
然后我得到以下结果
(2,3)
(7,9)
(2,9) --> 这是不需要的记录。
在 SQL 世界中,可以 SELECT * FROM demo WHERE (b, c) IN ((2, 3), (7, 9))
Mongo DB 中的等价物是什么?
解决方案
如果我做对了,那么您正在做的就是获得所有对 (2,3),(2,9),(7,3),(7,9)。但是你想一一匹配,所以你的有效对应该是 (2, 3), (7, 9)。为了满足这一点,您可以将 b 和 c 一个一个匹配,然后将它们配对并“或”它们。
db.getCollection('test').find({
$or: [
{$and: [ {b : 2}, {c : 3} ]},
{$and: [ {b : 7}, {c : 9} ]}
]
})
推荐阅读
- java-8 - Java8 -Optional.orElseGet 在 () 与方法调用中定义的供应商
- php - 如何添加多个动态 WHERE 查询?
- uri - 如何使用 Common Lisp 中名为 Quri 的替代库获得相同的 puri:uri-parsed-path 输出?
- episerver - 用于从外部源发布媒体文件的内容管理 API
- javascript - 尽管存在目录,但上传 mp3 文件会导致 XHR 404 错误
- google-sheets - 用于 Google Sheets + Google Data Studio 的数组中的 GOOGLEFINANCE 公式
- javascript - 如何在 Nuxt 中使用 vue-tel-input-vuetify?
- node.js - 使用nodeJS 14通过lambda将大尺寸图像文件从S3上传到云应用程序
- android - 无法在颤动中加载资产(图像)
- node.js - 具有 Firefox 配置文件的 Webdriver 无法以状态码 0 启动