db.test.find() {
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"title" : "Sir",
"name" : {
"_id" : ObjectId("4d3ed089fb60ab534684b7ff"),
"first_name" : "Farid"
},
"addresses" : [
{
"city" : "Baku",
"country" : "Azerbaijan"
},{
"city" : "Susha",
"country" : "Azerbaijan"
},{
"city" : "Istanbul",
"country" : "Turkey"
}
]
}
我想要只输出所有城市。或者我想只输出所有国家的输出。我该怎么办?
答案 0 :(得分:0)
我不是100%关于您的代码示例,因为如果您的“找到”'通过ID,不需要搜索任何其他内容......但我想知道以下内容是否有帮助:
db.test.insert({name:'farid', addresses:[
{"city":"Baku", "country":"Azerbaijan"},
{"city":"Susha", "country":"Azerbaijan"},
{"city" : "Istanbul","country" : "Turkey"}
]});
db.test.insert({name:'elena', addresses:[
{"city" : "Ankara","country" : "Turkey"},
{"city":"Baku", "country":"Azerbaijan"}
]});
然后以下将显示所有国家:
db.test.aggregate(
{$unwind: "$addresses"},
{$group: {_id:"$country", countries:{$addToSet:"$addresses.country"}}}
);
结果将是
{ "result" : [
{ "_id" : null,
"countries" : [ "Turkey", "Azerbaijan"]
}
],
"ok" : 1
}
也许有其他方式,但这是我所知道的。 有了'城市'你可能想要更加小心(因为我知道不同国家的同名城市......)。
答案 1 :(得分:0)
根据您的问题,这里可能存在两个潜在问题:
首先,看起来您正在尝试查询名为" test"的集合。通常,"测试"是您正在使用的实际数据库的名称。那么我担心的是你正试图查询数据库" test"找到任何有关键" city"或"国家"在任何内部文件上。 如果是这种情况,您实际需要做的是识别数据库中的所有集合,并单独搜索它们以查看这些集合中是否包含包含您要查找的密钥的文档。
(有关db.collection.find()方法如何工作的更多信息,请在此处查看MongoDB文档:http://docs.mongodb.org/manual/reference/method/db.collection.find/#db.collection.find)
其次,如果这实际上是您要执行的操作,则每个集合所需的只是定义一个查询,该查询仅返回您要查找的文档的键。如果您从查询中获得的结果超过0,您就会知道文档中有" city"键。如果他们没有返回结果,您可以忽略这些集合。 这里有一点需要注意,有关" city"的数据是在集合中的嵌入式文档中。如果是这种情况,您可能实际上需要了解哪些嵌入式文档可能包含您要查找的密钥。