2016-11-09 3 views
3

Мой документ выглядит следующим образом:Как получить динамический атрибут на основе других атрибутов документа?

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

Когда я обновить документ, я обновляю только "draft" ИЛИ как "draft" и "published". Так документ может выглядеть следующим образом:

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

or 

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

Что мне нужно, чтобы получить все документы с информацией, если draft === published, без фактического возвращения draft и published поля. В SQL я бы сделал следующее:

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

Возможно ли это сделать в MongoDB?

Я думал также о хранении isPublished: true/false флага в каждом документе, но когда я обновление draft не представляется возможным определить, если draft отличается от published или нет. Например, если у меня был документ {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. Боюсь, что манго сделает полное сканирование таблицы.

+0

Итак, кажется, что если я хочу избежать получения «черновиков» и «опубликованных», мне придется вычислить и сохранить хэш каждого из них для сравнения на стороне клиента. – user606521

Смежные вопросы