2012-08-08 30 views
0

我有兩個集合MongoDB中在MongoDB中,我怎麼都在充電具有用戶名 「X」

用戶(find()方法)的任務:

{ "_id" : ObjectId("5021314e372c50859ced7063"), "name" : "Vinícius", "username" : "vinixhenri", "password" : "vinix123" } 
{ "_id" : ObjectId("50213180372c50859ced7064"), "name" : "André", "username" : "andre", "password" : "andre123" } 

和項目(findOne ()):

{ 
    "_id" : ObjectId("50215d09ddf7410905000000"), 
    "name" : "Projeto X", 
    "local" : "/home/server/compartilhamento/htdocs/project_x/", 
    "permissions" : [ 
      { 
        "user" : "5021314e372c50859ced7063", 
        "alter" : true, 
        "view" : true, 
        "delete" : true, 
        "view_task" : true, 
        "insert_task" : true, 
        "alter_task" : true, 
        "delete_task" : true 
      }, 
      { 
        "user" : "50213180372c50859ced7064", 
        "alter" : true, 
        "view" : true, 
        "delete" : false, 
        "view_task" : false, 
        "insert_task" : false, 
        "alter_task" : false, 
        "delete_task" : false 
      } 
    ], 
    "tasks" : [ 
      { 
        "responsible" : "5021314e372c50859ced7063", 
        "description" : "Ajuste na barra lateral do site" 
      }, 
      { 
        "responsible" : "5021314e372c50859ced7063", 
        "description" : "Ajuste no cabeçalho do site" 
      }, 
      { 
        "responsible" : "50213180372c50859ced7064", 
        "description" : "Ajuste no rodapé do site" 
      } 
    ] 

}

我露面的項目findOne()集合,但我不知道它怎麼會是一個發現()也。

我該怎麼做才能得到所有收費的用戶名爲「vinixhenri」的任務?用戶標識符是任務 - >負責任的。

我還想知道如果我正確地保持_id用戶?這是正確的,我必須諮詢用戶信息,然後重新查詢數據庫的項目信息?或者我應該複製有關集合中用戶任務的信息?

回答

0

最appropiate晃到2.2(其中,你會:https://jira.mongodb.org/browse/SERVER-828甚至聚合框架)。將兩種:

  • 返回與一個或多個任務的所有根文件用的「充電」特定用戶在客戶端將其過濾出來,以便僅在那些與該用戶關聯的項目中獲得那些可能工作得很好的任務。

  • 運行MR(不推薦),每隔一段時間運行一次MR,將文檔重新格式化爲所需的版本。

注:MR不會是實時的,但是你可以過濾客戶端實時這樣我會親自選擇過濾了這一點,在客戶端。

我還想知道如果我正確地保留_id用戶嗎?這是 正確我必須諮詢用戶信息,然後重新查詢 數據庫的項目信息?或者我應該複製有關用戶在集合中的任務的信息 ?

是的,這是好的和高性能的。例如說,用戶更改他們的用戶名你不想通過所有項目文檔更改他們的用戶名嗎?不得不查詢外部行檢索所有信息更新與它的費用,但也有好處。在這種情況下,將用戶數據複製到項目文檔上會很糟糕。

+0

請注意,您不能使用Map/Reduce更新集合就地..這將允許一些有趣的遞歸悲傷:)。不過,您可以合併到現有的輸出集合中。查看[Map/Reduce輸出選項](http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Outputoptions)。 – Stennie 2012-08-08 13:10:25

+0

@Stennie事實上,MR必須輸出到不同的集合,將這部分留下。 – Sammaye 2012-08-08 13:12:21