【问题标题】:Finding documents containing at least one embedded object missing a given field查找包含至少一个缺少给定字段的嵌入对象的文档
【发布时间】:2013-06-05 18:20:46
【问题描述】:

是否有一种有效的方法来查找 Mongo 集合中至少有一个嵌入对象缺少给定字段的所有文档?

我正在尝试:

Response.where('answers.question_id' => nil)

但是,这只会返回每个答案都缺少 question_id 的响应,而不是包含至少一个缺少 question_id 的答案的响应。

我可以循环测试每个响应,但这对于我正在使用的数据库的大小来说非常慢,所以我很想找到一种方法来构建查询以缩小响应列表。

编辑:

Response.where(:'answers.question_id'.exists => false)

仍然没有解决我的问题 - 它仍然只找到 所有 个嵌入式答案都缺少 question_id 的响应,而不是 任何 个嵌入式答案都缺少 question_id 的响应。

【问题讨论】:

  • 有一个FAQ entry
  • @jimoleary - 谢谢,但这是用于查找具有空字段的文档,而不是包含至少一个具有空字段的嵌入对象的文档
  • 对不起,我最初的回答有点简洁!查看 FAQ 条目末尾的 $exists 运算符的描述。它描述了如何查找缺失的字段。

标签: ruby mongodb mongoid


【解决方案1】:

您是否尝试过以下任一方法?

Response.where(:answers => { "$elemMatch" => { :"answer_id".exists => false }})
Response.where(:answers.elem_match => { :answer_id.exists => false})

【讨论】:

  • 谢谢! Response.where(:answers.elem_match => { :question_id => nil}) 完全符合我的要求。
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多