我的每个记录都具有以下数组类型的属性:

alpha, beta, gamma, delta, epsilon, zeta

我知道我可以找到数组中至少有一个组件的记录,如下所示:

db.accommodations.find({'alpha.1': {$exists: true}})

我希望能够在至少3个数组中找到至少有一个组件的记录.例如,可以找到以下记录:

alpha = []
beta = [1, 1, 1]
gamma = []
delta = [1, 1]
epsilon = []
zeta = [1]

但这不能:

alpha = []
beta = [1, 1, 1]
gamma = []
delta = [1, 1]
epsilon = []
zeta = []

我有办法吗?

推荐答案

查询

  • 将它们放入父数组中
  • filter them and keep only those that have $size>=1
    ($size is more general, if you only care for at least 1, you can also do $ne with [])
  • 如果筛选结果有$size>=3个文档通过

PlayMongo

aggregate(
[{"$match": 
   {"$expr": 
     {"$gte": 
       [{"$size": 
           {"$filter": 
             {"input": 
               ["$alpha", "$beta", "$gamma", "$delta", "$epsilon", "$zeta"],
              "cond": {"$gte": [{"$size": "$$this"}, 1]}}}},
        3]}}}])

Mongodb相关问答推荐

无法在Ubuntu 22.04上安装MongoDB 7.0

如何联接Mongoose中的集合并检索特定字段

使用MongoDB 4将根文档替换为数组

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

在数据中只有月份和年份的 mongodb 中字符串的日期时间

使用名为 Object 键的 uuid 创建 mongodb 文档

使用 mgo 从 golang 中的 Mongodb 中 Select 列

Mongo DB中的Upserting和Id问题

`fields cannot be identical'和''` mongoimport错误

如何返回 MongoDB 中文档的 ObjectId 或 _id?和错误$in 需要一个数组

在 mongodb 中查找字段的所有非不同值

适用于 Windows 10 64 位的 MongoDB 下载

如何使用 c# 2.0 驱动程序将数据插入到 mongodb 集合中?

使用 Mongoid 和 Ruby 查询最近 30 天的日期范围?

如何为 node.js 中的 MongoDB 索引指定 javascript 对象中的属性顺序?

Mongoose Select 要从 findOneAndUpdate 返回的字段

处理Mongodb连接的正确方法是什么?

带有 either or查询的mongoose findOne

如何使用户的邮箱在 mongoDB 中唯一?

在mongoose中创建和查找地理位置