mongodb - 按选定值过滤查询[重复]

Posted

技术标签:

【中文标题】mongodb - 按选定值过滤查询[重复]【英文标题】:mongodb - filter query by selected value [duplicate] 【发布时间】:2016-01-13 05:30:36 【问题描述】:

给定以下 mongodb 文档:

db.customers

    "name" : "customer 1",
    "merchants" : [
         "name" : "test merchant 1" ,
         "name" : "test merchant 2" ,
         "name" : "test merchant 3" 
    ]


    "name": "customer 2",
    "merchants" : [
         "name" : "test merchant 1" 
    ]

我将如何查找并仅退回拥有多个商家的客户。

来自 SQL 背景,相当于:

Customers Table:
id int(11),
name char(56)

Merchants Table:
name char(56),
customer_id int(11)

select customer.id, count(merchants.id) as m_count 
from 
customers, merchants 
where
customers.id = merchants.customer_id
group by
customers.id
having
m_count > 1;

我将如何在 mongodb 中完成此操作?我已经使用聚合来获取商家的数量,但不知道如何根据数量过滤结果。也许在 mongodb 中有一种完全不同的方式来处理它......

【问题讨论】:

【参考方案1】:

尝试使用$where,例如here

> db.customers.find(  $where: "this.merchants.length > 1"  )

由于 MongoDB 只提供$size 运算符来检查是否相等,所以可以创建一个查询,在哪里检查字段是否存在,如果数组的长度不是 0 也不是 1,则表示大于 1:

> db.customers.find( $and: [merchants: $not:$size:0,merchants: $not:$size:1, merchants:$exists: true]  )

【讨论】:

谢谢。答案在另一个线程上可用,但您的答案也有效,因此会将其标记为已接受。

以上是关于mongodb - 按选定值过滤查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java实现对mongoDB的两表关联查询

mongodb - 按字符串数组过滤集合包含“”

按 bigquery 中的 REPEATED 值过滤

Paginate Mongoose / MongoDB查询:从一个点开始按两个字段排序[重复]

MongoDB通过许多参数过滤(复合索引与否)

具有特定条件计数的 Mongodb 聚合并按输出投影的日期范围过滤不能按预期工作