MongoDB DBReference怎么样?

时间:2015-06-13 22:18:58

标签: mongodb dbref

我正在学习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抱歉西班牙语。

2 个答案:

答案 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/