2015-04-23 62 views
-1

在我的應用程序2集合在那裏。準備使用流星搜索多個集合的查詢?

1.profile - 菲爾茲是:用戶名,身份證,城市和郵遞區號

2.材質 - ID,版本,descrption和使用

在我們爲使用單個集合如下圖所示:

var query = {}; 
query.username = 'xxxx'; 
query.city= 'yyyy'; 

需要多個集合查詢如下所示數據?

需要查詢才能通過用戶名和城市在配置文件descrption在材料?

+0

這兩個集合是如何關聯的?爲什麼你必須使用一個查詢而不是單獨查詢它們? –

+0

在配置文件ID是否有材料也是id there.So這兩個是相同的@ Carson Moore – user2344293

回答

3

MongoDB不支持關係數據庫(例如MySQL)的方式進行連接。有許多可用的材料關於這個問題,主要是...

這些什麼都歸結爲是這樣的:它不是本地的MongoDB中,但是對於流星,你有三種選擇:

  • 使用一個包到d Ø爲你
  • 反規範化(包括一個收集完全在其他)
  • 自己與出版這樣做,可以路由

從您的評論:

在配置文件ID爲有和材料也id在there.So這兩個是相同的

它聽起來像id字段是你想要jo在這裏 - 第二個選項(解除歸一化)在這裏非常容易,如果你可以避開它。而不是具有兩個類別,有一個收集在下面的格式:

{ 
    username, 
    material: { 
    version, 
    description, 
    usage 
    }, 
    city, 
    postalcode 
} 

然後查詢像這樣:

Profiles.find({username: 'xxxx', city: 'yyyy', "material.description": "zzzz"}); 

這在存儲效率和可重用性方面具有明顯的折衷(例如,如果你的material系列在其他地方使用,你不能真正將它嵌入profile系列)。請注意,如果您有許多具有相同描述的材料,這也適用。

如果您需要將它們保持分開,您可以縮小字段集以手動查找(選項3) - 您可以看到我如何在MeteorPad上做到這一點,但基本思想是在發佈功能中,查詢一個集合,然後再利用這些信息來查詢對方:

// Return all profiles with a certain material description -- includes multiple materials. 
Meteor.publish('profiles', function(username, city, material) { 
    var materialIds = Materials.find({description: material}).map(function(mat) { return mat._id }); 

    return Profiles.find({material: {$in: materialIds}, username: username, city: city}); 
}); 

有很多的軟件包的選擇,所以我會離開它給你找到一個最適合您的需求和閱讀該文件是否是您選擇的路線。

+0

這對我不適用@ Carson Moore – user2344293

+1

@ user2344293它不起作用?我很樂意幫忙,但除非我知道更多,否則我不能這樣做。這些解決方案不適合您的使用情況嗎?你有錯誤嗎? MeteorPad例子沒有意義嗎?你有什麼嘗試? –

+0

準確地說,我需要搜索像過濾器例如基本上過濾器查詢是基於配置文件字段和一個更多的選項也是給搜索字段是材料descrption.So dcscrption不是單身它可能存在重複。這一次得到的結果就像不檢查配置文件但materaila descrption將check.so可以爲此編寫查詢?@Carson Moore – user2344293