MongoDB通过查找另一个列值来获取对象ID

时间:2016-02-14 02:51:42

标签: mongodb aggregation-framework

我是新来的查询dbs,特别是mongodb。如果我跑:

db.<customers>.find({"contact_name: Anny Hatte"}) 

我明白了:

{ 
  "_id" : ObjectId("55f7076079cebe83d0b3cffd"), 
  "company_name" : "Gap", 
  "contact_name" : "Anny Hatte", 
  "email" : "ahatte@gmail.com" 
}

我希望从此查询结果中获取“_id”属性的值。我如何实现这一目标?

同样,如果我有另一个名为items的集合,则包含以下数据:

{ 
  "_id" : ObjectId("55f7076079cebe83d0b3d009"), 
  "_customer" : ObjectId("55f7076079cebe83d0b3cfda"), 
  "school" : "St. Patrick's" 
}

此处,"_customer"字段是客户集合(前一个集合)的"_id"。我希望获得记录的"_id""_customer""school"字段值,其中"_customer"项目集合等于"_id" customers-collection。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

  

我希望从此查询结果中获取“_id”属性的值。   我如何实现这一目标?

find()方法将游标返回到结果,您可以迭代并检索结果集中的文档。您可以使用forEach()

执行此操作
var cursor = db.customers.find({"contact_name: Anny Hatte"});
cursor.forEach(function(customer){
//access all the attributes of the document here
var id = customer._id;
})

您可以使用作为3.2一部分引入的聚合管道的$lookup阶段,以查找并获取其他相关集合中的匹配行。

db.customers.aggregate([
{$match:{"contact_name":"Anny Hatte"}},
{$lookup:{
  "from":"items",
  "localField":"_id",
  "foreignField":"_customer",
  "as":"items"
}}
])

如果您使用的是不支持舞台的mongodb以前版本,则需要针对每个客户触发额外查询以查找项目集合。

db.customers.find(
  {"contact_name":"Anny Hatte"}).map(function(customer){
  customer["items"] = [];
  db.items.find({"_customer":customer._id}).forEach(function(item){
     customer.items.push(item);
  })
  return customer;
})