基于范围查询MongoDB中嵌入式文档的数组

学习者

如何在mongodb中查询嵌入式文档的数组。

{
 _id: 1,
 zipcode: "63109",
 students: [
              { name: "john", school: 102, age: 14 },
              { name: "jess", school: 102, age: 11 },
              { name: "jeff", school: 108, age: 15 }
           ]
}
{
 _id: 2,
 zipcode: "63110",
 students: [
              { name: "ajax", school: 100, age: 7 },
              { name: "achilles", school: 100, age: 8 },
           ]
}
{
 _id: 3,
 zipcode: "63109"
}

假设对于上述数据,如何仅检索age> = 7和age <= 10的那些行。对于id_1,仅应返回年龄为10的行。id_2和id_3中的两行。另外,id_4没有称为学生的字段。因此,我不希望在输出中看到它。

编辑:-当我做一个过滤器时,我得到的输出看起来像这样。但我不希望具有“无”的行。最后一个文档_id:3没有现场学生,但是对学生进行了过滤,因此输出具有与之对应的“无”。

我想处理2种情况:

  1. 如果数组“学生”在id下不存在,则不应应用任何过滤。
  2. 数组学生存在但为空[]

如果简单过滤,这两种情况最终都会在输出中出现。


{'_id': ObjectId('5cdaefd393436906b016ddb4'),
 'students': [{'name': ajax,
               'school': '100',
               'age': '7'},
              {'name': achilles,
               'school': '100',
               'age': '8'}],
{'_id': ObjectId('5cdaefd393436906b016ddb3'), 'students': None}

注意:我使用的是不同但完全相同的数据集,因此输出结果并不准确,但希望您能理解。“学生”是嵌入式文档,可能会或可能不会出现在所有文档中。

编辑:最后,我使用了放宽来实现我想要的。

阿什

您可以使用以下汇总

db.collection.aggregate([
  { "$match": { "$expr": { "$gte": [{ "$size": { "$ifNull": ["$students", []] } }, 1] }}},
  { "$addFields": {
    "students": {
      "$filter": {
        "input": { "$ifNull": ["$students", []] },
        "cond": {
          "$and": [
            { "$gte": ["$$this.age", 7] },
            { "$lte": ["$$this.age", 10] }
          ]
        }
      }
    }
  }}
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mongoid:基于嵌入式文档数组的大小查询

查询嵌入式文档数组给出错误答案

MongoDB查询以查找多个嵌入式文档

复杂查询猫鼬-嵌入式文档数组

将嵌入式文档数组转换为mongoDB中的元素数组

查询Spring Data MongoDB中嵌入式文档的数组

在mongoDb中对嵌入式文档数组(3个级别)进行过滤查询

MongoDB查询-聚合和嵌入式文档

嵌入式文档数组中的MongoDB Aggregate ObjectId

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

如何在嵌入式数组mongodb中查询嵌入式文档

使用Presto查询MongoDB嵌入式/嵌套文档的数组

MongoDB:与查询不匹配的嵌入式文档

使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

MongoDB嵌入式文档自我查询

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

查询MongoDB中的嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

春季查询嵌入式文档的数组

php:将mongodb嵌入式文档查询到数组中

如何在MongoDB中查询数组中的单个嵌入式文档?

在mongodb中展开嵌入式文档

使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

如何查询Mongodb的嵌入式数组

MongoDB对数组和嵌入式文档的条件验证

如何在 MongoDb 中查询嵌入式文档?

Hibernate repo 查询以访问 mongodb 嵌入式文档

嵌入式文档和数组减少了对 MongoDB 中昂贵连接的需求

在 MongoDB 中搜索嵌入式文档?