我正在学习MongoDB,我接下来会有问题。
有我的MongoDB文档
这是 coordenada 文件
> db.coordenada.find().pretty()
{
"_id" : ObjectId("5579b81342a31549b67ad00c"),
"longitud" : "21.878382",
"latitud" : "-102.277364"
}
{
"_id" : ObjectId("5579b85542a31549b67ad00d"),
"longitud" : "21.878626",
"latitud" : "-102.280379"
}
{
"_id" : ObjectId("5579b89442a31549b67ad00e"),
"longitud" : "21.878845",
"latitud" : "-102.283512"
}
{
"_id" : ObjectId("5579b8bf42a31549b67ad00f"),
"longitud" : "21.879253",
"latitud" : "-102.286698"
}
{
"_id" : ObjectId("5579b8dd42a31549b67ad010"),
"longitud" : "21.879203",
"latitud" : "-102.291558"
}
{
"_id" : ObjectId("5579b8fd42a31549b67ad011"),
"longitud" : "21.878427",
"latitud" : "-102.296375"
}
{
"_id" : ObjectId("5579b91d42a31549b67ad012"),
"longitud" : "21.877571",
"latitud" : "-102.299659"
}
这是 rutas 文件
> db.rutas.find().pretty()
{
"_id" : "1",
"nombre" : "Ruta Penal",
"numero" : "20",
"coordenadas" : [
DBRef("coordenada", "5579b91d42a31549b67ad012")
]
}
{
"_id" : "2",
"nombre" : "Ruta Penal",
"numero" : "20",
"coordenadas" : [
DBRef("coordenada", "5579b91d42a31549b67ad012")
]
}
{
"_id" : "3",
"nombre" : "Ruta Penal",
"numero" : "20",
"coordenadas" : [
DBRef("coordenada", "5579b85542a31549b67ad00d")
]
}
{
"_id" : 6,
"nombre" : "Ruta Penal",
"numero" : "20",
"coordenadas" : [
DBRef("coordenada", "5579b85542a31549b67ad00d")
]
}
>
我尝试做的是,它获得&#34;纵向&#34; 和&#34; latitud&#34; 来自&#34; coordenada&#34; ,但仅限于&#34;数字&#34; 20 &#34; rutas&#34; < / strong>例如文件
我该怎么做?
PS抱歉西班牙语。
答案 0 :(得分:3)
根据DBRef的mongodb站点,您需要使用驱动程序来解压缩引用。我不认为mongo shell可以为你打开包装。
http://docs.mongodb.org/manual/reference/database-references/
要解析DBRefs,您的应用程序必须执行其他查询才能返回引用的文档。许多驱动程序都有辅助方法,可以自动形成DBRef的查询。驱动程序[1]不会自动将DBRef解析为文档。 DBRefs提供了一种通用格式和类型来表示文档之间的关系。如果数据库必须与多个框架和工具交互,则DBRef格式还提供用于表示文档之间链接的通用语义。 除非您有令人信服的理由使用DBRef,否则请使用手动引用。
基于此,我建议使用手动引用(只是文档ID)来改变它。
然而,要回答你的问题,你可以使用任何语言驱动程序,但下面是使用pymongo的Python中的一个例子:
from pymongo import MongoClient
from bson.objectid import ObjectId
from bson.dbref import DBRef
client = MongoClient()
db = client.testDB
rutas_20 = list(db.rutas.find({"numero": "20"}))
for ruta in rutas_20:
for coordenada in ruta.get('coordenada'):
coord_doc = db.coordenada.find_one({"_id": ObjectId(coordenada.id) })
print coord_doc.get('longitud'), coord_doc.get('latitud')
您也可以使用db.dereference(DBRef())。
希望它有所帮助。 欢呼声。
答案 1 :(得分:0)
是的,您可以通过引用其他类的对象ID来获取特定项目的纬度和经度。
要使用momgo dbRef,您必须根据您使用的特定语言使用特定的驱动程序。驱动程序文档将告诉您可以使用的功能。
我使用PHP,因此参考, http://www.php.net/manual/en/class.mongodbref.php/