【问题标题】:Querying on a virtual property in mongoose在猫鼬中查询虚拟属性
【发布时间】:2014-12-18 07:45:56
【问题描述】:

我的 mongoose 架构中有一个虚拟属性,我想知道是否可以使用此属性查询我的文档。

var PersonSchema = new Schema({
  number: {type: Number, required: true},
  name: {type: Date, required: true}
});

PersonSchema.virtual('capitalCaseName').get(function () {
  return this.name.toUpperCase();
});
...
Person.find({"capitalCaseName": "DANIEL"}).exec();
...

【问题讨论】:

  • 为什么不使用不区分大小写的正则表达式查询?
  • 我使我的示例易于理解。那不是真正的模型

标签: node.js mongodb mongoose


【解决方案1】:

不,你不能。 Mongoose 虚拟属性仅存在于文档的 Mongoose 模型表示中,而不存在于执行查询的 MongoDB 本身中。

您需要查询的任何字段都必须在架构中定义为非虚拟字段并保存到数据库中。

【讨论】:

  • 如果可以的话不是很好吗?
  • 是否存在替代解决方案?
  • 是的,另一种解决方案是使用$where$expr,这允许您手动“计算”虚拟属性并创建更自定义的查询。
  • 会很好,但请考虑一下。 Virtuals 不存在于真实数据库中。如果 mongoose 可以使用虚拟属性进行查询,您正在让它计算每个文档(所有文档)的虚拟字段,然后将比较结果。这对数据库引擎来说会很痛苦,并且会大大降低您的代码速度。
  • @newman 这不会很好,因为那样你会在应用程序层(节点)上运行查询,这不是为了对数据而不是 DB 层(MongoEngine)运行高效查询而设计的旨在对数据运行高效查询
猜你喜欢
  • 2013-08-24
  • 2021-02-23
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多