1

我正在学习 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"
}

这是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")
        ]
}
>

我正在尝试做的是从“coordenada”获取“经度”“纬度” ,但仅适用于“rutas”文档的“numero” 20

我怎样才能做到这一点?

PS对不起西班牙语条款。

4

2 回答 2

3

根据 DBRef 的 mongodb 站点,您需要使用驱动程序来解包引用。我不认为 mongo shell 可以为你解包。

http://docs.mongodb.org/manual/reference/database-references/

要解析 DBRefs,您的应用程序必须执行额外的查询以返回引用的文档。许多驱动程序都有自动形成 DBRef 查询的辅助方法。驱动程序 [1] 不会自动将 DBRefs 解析为文档。DBRefs 提供了一种通用的格式和类型来表示文档之间的关系。如果您的数据库必须与多个框架和工具交互,DBRef 格式还提供了表示文档之间链接的通用语义。除非您有令人信服的理由使用 DBRefs,否则请改用手动引用。

基于此,我建议改为使用手动参考(仅文档 ID)来更改它。

但是,要回答您的问题,您可以使用任何语言驱动程序,但以下是 Python 中使用 pymongo 的示例:

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()) 。

希望能帮助到你。干杯。

于 2015-06-14T08:06:27.153 回答
0

是的,您绝对可以通过引用其他类的对象 id 来获取特定项目的经纬度。

要使用 momgo dbRef,您必须根据您使用的特定语言使用特定的驱动程序。驱动程序文档将告诉您可以使用的功能。

我使用 PHP,因此参考 http://www.php.net/manual/en/class.mongodbref.php/

于 2015-07-10T17:29:39.850 回答