如何根据现有的 mongoose 查询检查单个文档?
Posted
技术标签:
【中文标题】如何根据现有的 mongoose 查询检查单个文档?【英文标题】:How could I check a single document against an existing mongoose query? 【发布时间】:2013-11-14 09:44:22 【问题描述】:我有一个 mongoose 查询保存在一个变量中,然后我有一个相同集合的随机 mongoose 文档,该查询已打开。我想知道我的文档是否与查询匹配。我知道我可以对集合运行查询,然后查看结果集是否包含文档,但我想节省一些性能并仅在一个文档上运行它。这可能吗?如果是,那怎么办?
【问题讨论】:
【参考方案1】:虽然本地查询可能是可能的,但如果本地查询不可行,我建议您考虑这样做:
Example
.findOne(existingQuery)
.where('id').equals(compareTo.id)
.select('id')
.exec(function(err, doc)
if (!err && doc)
console.log('found it!');
);
您要比较的文档有一个_id
。所以,在上面,我已经通过了你提到的现有查询,并且还添加了对随机文档_id
的检查。 MongoDB 应该使用索引(正如您使用的 _id
),然后运行您的查询。它尽可能少地返回(而不是完整的文档)。
虽然这要求对数据库执行查询,但它只会检查一个文档。
【讨论】:
findOne 会接受一个 Query 对象作为参数吗?【参考方案2】:AFAIK 仅使用现有的 mongodb 工具,您不能这样做。然而,作为meteor.js framework 的一部分,他们有一个名为minimongo 的mongodb 接口子集的内存端口,包括大部分查询语义(我相信,这主要来自阅读文章而不是直接经验构建使用这些工具)。所以理论上你可以将你的文档添加到一个 1-document 数组(内存中的集合)并使用 minimongo 运行它。如果您尝试这样做并让它在流星之外工作,请告诉我,因为它在一般情况下以及用于测试时看起来都很方便!
另一个选项在总体方案中可能没有意义,除非您的主要收藏确实非常庞大,但我会提到只是因为我认为这是一个值得考虑的有效选项,那就是插入将您的单个文档放入一个新的(由 mongodb 插入时自动创建的)临时集合并进行查询。
【讨论】:
以上是关于如何根据现有的 mongoose 查询检查单个文档?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 和 Mongoose 正则表达式查询多个字段
如何在 mongoose/mongodb 查询子文档中使用 mapreduce?