Mongodb:断言数组中的所有元素都有一个非空字段

Mongodb:断言数组中的所有元素都有一个非空字段,mongodb,mongoid,Mongodb,Mongoid,给定包含以下文档的集合: 任务收集文件 [ { "_id"=>BSON::ObjectId('54d674b64d42504b6a000000'), "submissions"=> [{"_id"=>BSON::ObjectId('54d674b64d42504b6a010000'), "grade"=>nil, "user_id"=>BSON::ObjectId('54d1e2454d42503069060000')},

给定包含以下文档的集合:

任务收集文件

[
{
 "_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')}
   ],
 }
]
如何获取提交数组不包含零级的所有任务文档

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

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

使用elem_匹配和否定比较:

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