2

我有一个保存在变量中的猫鼬查询,然后我有一个相同集合的随机猫鼬文档,该查询已打开。我想知道我的文档是否与查询匹配。我知道我可以对集合运行查询,然后查看结果集是否包含文档,但我想节省一些性能并仅在一个文档上运行它。这可能吗?如果是,那怎么办?

4

2 回答 2

1

AFAIK 仅使用现有的 mongodb 工具,您不能这样做。然而,作为meteor.js框架的一部分,它们有一个名为minimongo的mongodb接口子集的内存端口,包括大部分查询语义(我相信,这主要来自阅读文章,而不是直接建立经验这些工具)。所以理论上你可以将你的文档添加到一个 1-document 数组(内存中的集合)并使用 minimongo 运行它。如果您尝试这样做并让它在流星之外工作,请告诉我,因为它通常看起来很方便以及用于测试!

另一个可能在总体方案中没有意义的选项,除非您的主要收藏真的很庞大,但我会提到只是因为我认为这是一个值得考虑的有效选项,那就是插入您的单个文档进入一个新的(由 mongodb 插入时自动创建的)临时集合并查询它。

于 2013-11-03T18:39:11.610 回答
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),然后运行您的查询。它尽可能少地返回(而不是完整的文档)。

虽然这要求对数据库执行查询,但它只会检查单个文档。

于 2013-11-03T19:48:38.050 回答