2012-11-23 24 views
5

如何在不知道原始文檔中包含的詳細信息的情況下,像{conditionB:1}這樣的條件並添加時間戳ts_imported,如何從collectionABC中簡單地複製文檔並將它們複製到collectionB中?對於sql的mongodb翻譯INSERT ... SELECT

我無法找到一個簡單的等效MongoDB的這類似於MySQL的INSERT ... SELECT ...

+0

我不是一個專家的MongoDB的背景下,但我對此也做了一些研究,我的理解是,您必須在循環中讀取每個對象並將其保存到數據庫中,然後在保存之前設置任何值(例如ID或時間戳)。 – Diego

回答

14

您可以使用JavaScript從mongoshell實現了類似的結果:

db.collectionABC.find({ conditionB: 1 }). 
forEach(function(i) { 
    i.ts_imported = new Date(); 
    db.collectionB.insert(i); 
}); 
+0

這不是動態的類似......就像在你的應用程序中做客戶端一樣。 – Sammaye

+1

事實上,問題是將文檔從集合複製到另一個集合,同時以與INSERT ... SELECT類似的方式添加字段。更重要的是,mongoshell是mongodb的主要接口,所有查詢都是javascript,根據我的愚見,javascript查詢可以被同化爲RDBMS的SQL查詢。 – Eric

+0

事實上,無論JS只是另一個驅動程序,它絕不是主要的一個,它只是預先綁定到MongoDB的一個,但是,如果OP弄糊塗了,我想我會說這個動態代碼與它在SQL中的工作方式不同,所以很多人認爲控制檯不是特別的特殊。 – Sammaye

1

的MongoDB沒有那樣的查詢能力,因此,你可以(在查詢的)插入到從第一個基於變量的另一集合採集。

您需要先取出該文件,然後對其進行操作。

你可以在技術上使用MR,但我有一種感覺,它不適用於你的情況。

+0

不同意你的回答... –

+0

@AmolMKulkarni如何? – Sammaye