2011-05-29 123 views
0

我想知道MongoDB中這個MySQL命令的等價物。如何將INSERT INTO ... SELECT轉換成MongoDB

INSERT INTO xyz (field1, field2, field3, field4) 
SELECT t1.id, t2.id, t3.id, NOW() FROM t1, t2, t3 

我一直在使用MongoDB只有48小時,恐怕我無法弄清楚那一個。

謝謝你的一切:)。

回答

1

的MongoDB沒有做連接,以便你的前三個步驟是:

  1. 抓鬥t1.id從MongoDB中,並把它放在t1_id
  2. 從MongoDB抓取t2.id並將其放入t2_id
  3. 從MongoDB抓取t3.id並將其放入t3_id

然後,您可以在場所使用new Timestamp()NOW()

db.xyz.insert({ 
    field1: t1_id, 
    field2: t2_id, 
    field3: t3_id, 
    field4: new Timestamp() 
}); 

如果你真的做了三路交叉的產品,那麼你就必須來包裝上述三重嵌套循環像這樣:

for(var i = 0; i < all_t1_ids.length; ++i) { 
    for(var j = 0; j < all_t2_ids.length; ++j) { 
     for(var k = 0; k < all_t3_ids.length; ++k) { 
      db.xyz.insert({ 
       field1: all_t1_ids[i], 
       field2: all_t2_ids[j], 
       field3: all_t3_ids[k], 
       field4: new Timestamp() 
      }); 
     } 
    } 
} 

你必須用MongoDB手動執行很多傳統的RDBMS。

+0

但是,如果我的原始MySQL查詢插入了大約400K條記錄,那麼您建議的那個會做同樣的事情嗎?從它的外觀來看,它看起來只會插入一個。 – Pierre 2011-05-29 15:41:40

+0

@Pierre:你必須把它包裝在一個循環中,我會添加一個更新來達到這個效果。 – 2011-05-29 17:54:08