我正在学习MongoDB,我有下一个问题。
有我的MongoDB文档
这是协调文件
> 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"
}
这是鲁塔斯文件
> 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")
]
}
>
我正在尝试做的是从"coordenada"中获取"longitud"和"latitud",但仅适用于"rutas"文档的"数字"20
我该怎么做?
PS对西班牙语术语表示抱歉。
根据 DBRef 的 mongodb 站点,您需要使用驱动程序来解压缩引用。我不认为蒙戈壳可以为你打开包装。
http://docs.mongodb.org/manual/reference/database-references/
若要解析 DBRefs,应用程序必须执行其他查询以返回引用的文档。许多驱动程序具有自动形成 DBRef 查询的帮助程序方法。驱动程序 [1] 不会自动将 DBRefs 解析为文档。 DBRefs 提供通用格式和类型来表示文档之间的关系。DBRef 格式还提供了用于表示文档之间链接的通用语义(如果数据库必须与多个框架和工具交互)。 除非您有令人信服的理由使用 DBRefs,否则请改用手动引用。
基于此,我建议使用手动引用(仅文档 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())。
希望对您有所帮助。干杯。
是的,您绝对可以通过引用其他类的对象 ID 来获取特定项目的纬度和经度。
要使用momgo dbRef,您必须根据您使用的特定语言使用特定的驱动程序。驱动程序文档将告诉您可以使用的功能。
我使用PHP,因此参考,http://www.php.net/manual/en/class.mongodbref.php/