1

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

这是一个带有几个文档的示例。

文件 1

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

文件 2

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

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

4

2 回答 2

0

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

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

coll.find( { services : { $elemMatch : { service : "one", data: { ... } } } } )
于 2012-11-15T09:43:47.817 回答
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' });
于 2012-11-15T06:26:02.800 回答