2016-11-09 1 views
3

내 문서는 다음과 같습니다 : 나는 문서를 업데이트 할 때, 난 단지 "draft" 또는 모두 "draft""published"를 업데이트다른 문서 속성을 기반으로 동적 속성을 가져 오는 방법은 무엇입니까?

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

. 그래서 문서는 다음과 같이 보일 수 있습니다 :

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

or 

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

을 내가 필요한 것은, 실제로 draftpublished 필드를 반환하지 않고, 정보 draft === published 경우 모든 문서를 검색하는 것입니다. 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}) 

이렇게하면 draftpublished에 해당 문서의 ID를 제공 할 것입니다. 하지만 몽고는 전 표 스캔을 할 것입니다.

+0

좋습니다. "초안"및 "게시"검색을 피하려면 클라이언트 측에서 비교할 각 해시를 계산하고 저장해야합니다. – user606521

관련 문제