,请事先想好您的帮助。我最近开始将mongoDB用于某些个人项目,并且我想找到一种查询数据的更好方法。
我的问题是:我有以下收藏:
{
"_id" : ObjectId("5dbd77f7a204d21119cfc758"),
"Toyota" : {
"Founder" : "Kiichiro Toyoda",
"Founded" : "28 August 1937",
"Subsidiaries" : [
"Lexus",
"Daihatsu",
"Subaru",
"Hino"
]
}
}
{
"_id" : ObjectId("5dbd78d3a204d21119cfc759"),
"Volkswagen" : {
"Founder" : "German Labour Front",
"Founded" : "28 May 1937",
"Subsidiaries" : [
"Audi",
"Volkswagen",
"Skoda",
"SEAT"
]
}
}
我想在此获取对象名称,例如,我想返回 [丰田,丰田]
我已经使用这种方法
var names = {} db.cars.find().forEach(function(doc){Object.keys(doc).forEach(function(key){names[key]=1})}); names;
这给了我以下结果:
{ "_id" : 1, "Toyota" : 1, "Volkswagen" : 1 }
但是,有没有更好的方法来获得相同的结果并仅返回对象的名称。谢谢。
答案 0 :(得分:0)
我建议您将架构设计更改为:
{
_id: ...,
company: {
name: 'Volkswagen',
founder: ...,
subsidiaries: ...,
...<other fields>...
}
然后您可以使用聚合框架来实现类似的结果:
> db.test.find()
{ "_id" : 0, "company" : { "name" : "Volkswagen", "founder" : "German Labour Front" } }
{ "_id" : 1, "company" : { "name" : "Toyota", "founder" : "Kiichiro Toyoda" } }
> db.test.aggregate([ {$group: {_id: null, companies: {$push: '$company.name'}}} ])
{ "_id" : null, "companies" : [ "Volkswagen", "Toyota" ] }
有关更多详细信息,请参见:
作为奖励,您可以在company.name
字段上创建索引,而不能像示例中那样在各种字段名称上创建索引。