【问题标题】:Mongoose - Querying a collection for a new property with a default value without having to resave every elementMongoose - 在集合中查询具有默认值的新属性,而无需重新保存每个元素
【发布时间】:2015-06-07 08:04:16
【问题描述】:

我们最近在我们的一个 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) {

编辑:我刚刚发现 https://stackoverflow.com/a/14288276/8324 这似乎暗示没有干净的方法可以做到这一点,建议保持原样,只需将 {sales_category: "Prospect"} 的任何查询反转为查询只要枚举永远不会改变,其他任何类别似乎都不是最好的解决方案。我不确定我们是否可以在这个用例中保证它,所以我想我最终可能会回到“重新保存所有内容”的解决方案,即使感觉不太好。

如果有人有更好的解决方案,我会暂时保持打开状态。

【问题讨论】:

    标签: mongodb mongoose mean-stack


    【解决方案1】:

    OR 条件与$exists 运算符一起使用怎么样?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 2023-03-28
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2018-10-03
      相关资源
      最近更新 更多