【问题标题】:Mongodb: assert that all elements in an array have a field not nullMongodb:断言数组中的所有元素都有一个不为空的字段
【发布时间】:2023-03-17 02:52:01
【问题描述】:

给定一个包含这样文档的集合:

任务收集文档

[
{
 "_id"=>BSON::ObjectId('54d674b64d42504b6a000000'), 
 "submissions"=>
  [{"_id"=>BSON::ObjectId('54d674b64d42504b6a010000'),    
    "grade"=>nil,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069060000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a020000'),       
    "grade"=>nil,            
    "user_id"=>BSON::ObjectId('54d1e2454d42503069070000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a030000'),    
    "grade"=>nil,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069080000')}
   ],
 },
{
 "_id"=>BSON::ObjectId('54d674b64d42504b6a100000'), 
 "submissions"=>
  [{"_id"=>BSON::ObjectId('54d674b64d42504b6a010000'),    
    "grade"=>5,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069060000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a020000'),       
    "grade"=>7,            
    "user_id"=>BSON::ObjectId('54d1e2454d42503069070000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a030000'),    
    "grade"=>nil,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069080000')}
   ],
 },
{
 "_id"=>BSON::ObjectId('54d674b64d42509b6a000000'), 
 "submissions"=>
  [{"_id"=>BSON::ObjectId('54d674b64d42504b6a010000'),    
    "grade"=>8,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069060000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a020000'),       
    "grade"=>7,            
    "user_id"=>BSON::ObjectId('54d1e2454d42503069070000')},
   {"_id"=>BSON::ObjectId('54d674b64d42504b6a030000'),    
    "grade"=>6,    
    "user_id"=>BSON::ObjectId('54d1e2454d42503069080000')}
   ],
 }
]

如何获取submissions数组中不包含nil等级的所有tasks文档?

示例中的结果将只包含最后一个。

我正在使用 Mongoid,但我也欢迎纯 Mongodb 查询。

【问题讨论】:

    标签: mongodb mongoid


    【解决方案1】:

    使用elem_match 和否定比较:

    Task.where(:submissions.elem_match => { :grade.ne => nil })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多