2014-10-01 32 views
0

我寻找各种方法来优雅implemently以下更新约束:猫鼬,都集合中只有一个文档具有真正价值的一个布尔属性

var artifactSchema = new mongoose.Schema({ 

pid: String, 
pname: String, 
version: Number, 
active: Boolean, 
date_of_modification: Date, 

tags: [String], 

data: String 

})

我想那只有集合中的文档对活动字段具有“真实”。工件可以有多个版本,基准版本是活动== true的。

+0

如果只有一个包含单个活动工件文档的_id的文档,可能会更好。 – JohnnyHK 2014-10-02 17:16:22

回答

0

这是一种愚蠢的,但你可以使用一个唯一的,sparse指数:

> db.artifacts.ensureIndex({ "active" : 1 }, { "sparse" : 1, "unique" : 1 }) 

唯一性确保只有一个集合中的文档可以在active领域true值。稀疏性确保多个文档不能设置active字段。副作用是active中最多只有一个文档可以有false值。

有关MongoDB版本控制的大量有用建议,请查看askasya.com

+0

我希望所有非活动构件的活动字段都设置为false,因为大多数客户端代码都需要这样做。稀疏的索引似乎对我的项目的其他部分有用,虽然 – prk68 2014-10-02 09:35:28

+0

不幸的是,不能使用这个技巧。您必须强制执行客户端代码中的限制。 – wdberkeley 2014-10-02 16:26:58

相关问题