Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用DBRef查询MongoDB中的其他属性_Mongodb_Pymongo_Dbref - Fatal编程技术网

使用DBRef查询MongoDB中的其他属性

使用DBRef查询MongoDB中的其他属性,mongodb,pymongo,dbref,Mongodb,Pymongo,Dbref,我在mongodb中有两个表的结构: >db.mapping.find() >db.fttc.find() >db.mapping.find()[0].tc.fetch().full build1111_tastcase_1 >db.mapping.find({'tc.$id':ObjectId(“52d74f4841538c0b3860902e”)) 现在,我可以获取其tc属性“id”为ObjectId(“52d74f4841538c0b3860902e”)的项目 但是,如何从映射中找到所有

我在mongodb中有两个表的结构:

>db.mapping.find()

>db.fttc.find()

>db.mapping.find()[0].tc.fetch().full

build1111_tastcase_1
>db.mapping.find({'tc.$id':ObjectId(“52d74f4841538c0b3860902e”))

现在,我可以获取其tc属性“id”为
ObjectId(“52d74f4841538c0b3860902e”)
的项目

但是,如何从映射中找到所有项,它们的tc属性“full”是“build1111\u tastcase\u 20

是否有任何查询语句


任何帮助或建议将不胜感激

实际上,您需要的是一个连接,这在MongoDB中是不受支持的服务器端功能(按设计)

鉴于您的
映射
集合当前只有一个指向
fttc
集合的DBref,您必须通过使用多个查询并将结果加入应用程序来解决此问题。这需要在服务器端进行三次查询:一次查找
映射
文档,一次查找相关的
fttc
文档,最后在
fttc
上搜索具有相同
full
属性的匹配文档

在MongoDB中实现这一点的更好方法是对要查询的
full
属性进行非规范化,因此它最终保存在两个集合中

您的映射文档将如下所示:

{ "_id" : ObjectId("52d74f4941538c0b386090a0"), 
  "tc" : DBRef("fttc", ObjectId("52d74f4841538c0b3860902e")),
  "full" : "build1111_tastcase_20",
  "hit" : { "24" : 3, "25" : 3 }
}
查找相关的
fttc
文档的查询变成了一个简单的
find()
。由于您从两个集合中获取数据,因此仍然需要进行两次查询,但这比当前方法少了一次查询:

doc = db.mapping.findOne({"_id" : ObjectId("52d74f4941538c0b386090a0")})
related = db.fttc.find({"full" : doc.full});

通过
db.dereference(db.mapping.find_one()['tc'])['full']访问'full'。

{ "_id" : ObjectId("52d74f4941538c0b386090a0"), 
  "tc" : DBRef("fttc", ObjectId("52d74f4841538c0b3860902e")),
  "hit" : { "24" : 3, "25" : 3 } }
...
{ "_id" : ObjectId("52d74f4941538c0b386090a0"), 
  "tc" : DBRef("fttc", ObjectId("52d74f4841538c0b3860902e")),
  "full" : "build1111_tastcase_20",
  "hit" : { "24" : 3, "25" : 3 }
}
doc = db.mapping.findOne({"_id" : ObjectId("52d74f4941538c0b386090a0")})
related = db.fttc.find({"full" : doc.full});