MongoDB:带数组的嵌套查询,以及它的性能

时间:2011-10-07 13:43:52

标签: mongodb mongodb-scala

我在2个独立的数据库上有2个集合。两者都存储一个数组字段。我打算一次查询两个:

  

所有集合1在其数组中包含元素[A,B]的文档   字段及其_id出现在集合2的数组字段中,带有a   具体文件_id。

举个例子:

docs(collection 1,DB 1):

[{"_id":ObjectId("doc1"), "array1":["A","B"]}, {"_id":ObjectId("doc2"), "array1":["A","C"]}]

user_docs(集合2,DB 2):

[{"_id":ObjectId("usr1"), "array2": [ObjectId("doc1"),ObjectId("foo")]}, {"_id":ObjectId("usr2"), "array2": [ObjectId("bar"),ObjectId("baz")]}]

我需要一个给定A,B和usr1的查询,返回' doc1' object(因为它有一个A,B在它的array1字段中,而usr1在它的array2字段中有它)。

我显然可以在一个查询中获取所有具有A,B的文档,并在另一个查询中获取所有usr1的文档,并在应用程序级别查找公共元素,但有没有更好的方法使用MongoDB?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

好的我不确定我是否完全理解你的描述中的尝试。但我不明白为什么你会在db上查询数据,这对我来说似乎非常沉重,为什么你不能将这两个数据集存储在同一个数据库中。如果需要,您可以随后分开吗?我不确定这会解决你的模糊问题,但这将是一个很好的起点。

运气最好。

答案 1 :(得分:0)

您必须两次查询MongoDB,因为您无法进行连接。您必须在应用程序级别上执行此操作。如果可以非规范化,那就去做吧。在嵌入式文档中兑现所需数据,以便您只能进行一次查询。

我认为@Eamonn是对的,您不应该跨DB进行查询。