我是新来的查询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。
我该怎么做?
答案 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;
})