返回嵌入式doc时,基于doc字段和嵌入式doc字段的结构查询

时间:2012-11-15 06:05:18

标签: javascript mongodb database

我正在尝试在mongo数据库中查询嵌入式文档。我根据文档中的字段和嵌入文档中的字段进行查询。

这是一个包含几个文档的示例。

doc 1

{
  token: 'foo'
  services: [
  {
    service: 'one',
    data: {...}
  },
  {
    service: 'two',
    data: {...}
  }
  ]
}

doc 2

{
  token: 'bar'
  services: [
  {
    service: 'one',
    data: {...}
  },
  {
    service: 'two',
    data: {...}
  }
  ]
}

我想从第一份文档中获取{service: 'one', data: {...}}嵌入式文档。但是我不太确定如何构造查询。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您有这样的集合:

   var coll =  {
      token: 'foo',
      services: [
        {
          service: 'one',
          data: {}
        },
        {
          service: 'two',
          data: {}
        }
      ]
    }

您可以使用service: 'one'查询访问coll.services[0]对象。

<强>更新 如果要逐个字段地选择对象,可以尝试:

$.grep(coll.services, function(e) { return e.service == 'one' });

答案 1 :(得分:0)

如果doc 1和doc 2代表同一个集合中的两个文档,那么你需要通过一些明确的标识符(如id或name等)获取第一个文档,然后从代码中读取services数组的第一个元素。 / p>

如果doc 1和doc 2是查询的结果,你需要过滤匹配{service:'one',data:{...}}的文档,那么因为services是一个数组,你需要使用$ elemMatch。

coll.find( { services : { $elemMatch : { service : "one", data: { ... } } } } )