MongoDB查询嵌套数组搜索

时间:2015-04-21 21:37:50

标签: mongodb database

我需要使用包含嵌套数组的mongoDb查询文档。我看到很多使用简单的$ in运算符的例子。唯一的问题是我严格需要检查正确的子集。

请考虑以下文件。

{data: [[1,2,3], [4,5,6]]}

查询需要能够获取所有[1,2,3]的文档,其中1,2,3可以是任何顺序,这排除了以下查询,因为它只会以正确的顺序匹配

{data:{$elemMatch:{$all:[[1,2,3]]}}}

我也尝试过嵌套的$ elemMatch运算符,但没有成功,因为$ in运算符将返回文档,即使只有一个元素匹配,如下所示。

 {data:{$elemMatch:{$elemMatch:{$in:[1,4]}}}}

2 个答案:

答案 0 :(得分:0)

不确定您的实际查询是什么样的,但这应该是您需要的: db.documentDto.find({“some_field”:{“$ elemMatch”:{“$ in”:[1,2,3]}}})

答案 1 :(得分:0)

我还没有得到一个完整的答案(并没有太多的时间,因为它已经很晚了)但我会考虑

  1. 如果您还没有
  2. ,请使用汇总管道而不是查询
  3. 使用$ unwind运算符来解构嵌套数组
  4. 使用$ sort对数组的内容进行排序 - 因此您现在可以比较
  5. 使用$ match过滤掉不适合数组子集值的数组,因为您现在可以根据顺序进行检查。
  6. 使用$ group根据_id值将结果分组回来
  7. 价: http://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/将为您提供上述每一项信息。

    通过快速搜索,我提出了一个可能有用的类似问题/示例:Mongodb sort inner array