Mongoose - 查询具有默认值的新 属性 的集合,而无需重新保存每个元素

Mongoose - Querying a collection for a new property with a default value without having to resave every element

我们最近向我们的一个 Mongoose 模式添加了一个新的 属性,它定义了一个带有枚举验证器和默认值的字符串。我们现在需要使用 属性 查询文档,但在查询发生之前不会为预先存在的文档设置它。有没有办法解决这个问题,而不必重新保存此更改之前存在的那个集合中的每个文档,或者如果没有,是否有如何干净地做到这一点的最佳实践?

新的属性:

sales_category: {
    type: String, 
    required: true,
    enum: ["Prospect", "Subscriber", "Activated Trial", "Expired Subscriber", "Expired Free Trial"],
    default: "Prospect"
}

查询:

Account.find({sales_category: "Prospect"}).populate("account_holder").exec(function(err, accounts) {

编辑:我刚刚发现 ,这似乎暗示没有干净的方法可以做到这一点,建议保持原样并反转 {sales_category 的任何查询: "Prospect"} 查询其他任何类别似乎都是最好的解决方案,前提是枚举永远不会改变。我不确定我们是否可以在这个用例中保证它,所以我想我最终可能会回到 "re-save everything" 解决方案,即使它感觉不太好。

如果有人有更好的解决方案,我暂时将其打开。

使用 OR conditional with an $exists 运算符怎么样?

Account.find().or([{sales_category: "Prospect"}, { sales_category: { $exists: false }}]).populate("account_holder").exec(function(err, accounts) {...});

请注意:这不使用索引,只有在大型集合上使用它才会引起关注。