如何根据其他文档属性检索动态属性?

时间:2016-11-09 10:11:54

标签: mongodb

我的文档如下:

{ 
  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时,无法确定draft是否与published不同。例如,如果我有文档{draft: "A", published: "A", isPublished: true},那么使用{draft: "A", isPublished: false}更新它会更改isPublished的状态,即使草稿与已发布的内容相同...

1 个答案:

答案 0 :(得分:1)

MongoDB没有专门的支持。但是,您可以使用$where来实现此目的。

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

这只会为您提供draft等于published的文档的ID。但mongo会做全桌扫描,我很害怕。