2016-11-09 95 views
3

我的文件看起來是這樣的:如何根據其他文檔屬性檢索動態屬性?

{ 
    draft: "<draft_content>", 
    published: "<published_content>" 
} 

當我更新文檔,我只更新"draft"或兩者"draft""published"。因此,文件可能是這樣的:

{ 
    draft: "B", 
    published: "A" 
} 

or 

{ 
    draft: "B", 
    published: "B" 
} 

我需要什麼,是獲取所有文件如果有信息draft === published,不必實際的返回draftpublished領域。在SQL中,我會這樣做:

select (draft = published)::boolean as is_published from documents; 

在MongoDB中可以這樣做嗎?

我也想過保存每個文檔中isPublished: true/false標誌,但是當我更新draft是不可能的,以確定是否draftpublished或沒有不同。例如,如果我有文檔{draft: "A", published: "A", isPublished: true},那麼使用{draft: "A", isPublished: false}進行更新會改變isPublished的狀態,即使草稿與已發佈的相同...

回答

1

MongoDB對此沒有專門的支持。但是,您可以使用$where來實現此目的。

db.myCollection.find({ $where: "this.draft == this.published" }, {id:1}) 

這會給你只有在draft等於published文件的ID。但是mongo恐怕會做全表掃描。

+0

好吧,看來如果我想避免檢索「草稿」和「發佈」,我將不得不計算並存儲它們中的每一個的散列以在客戶端進行比較。 – user606521

相關問題