自定义MongoDB搜索查询

时间:2012-01-01 16:24:41

标签: node.js mongodb mongoose

在我的数据库中,我有包含属性foo的文档。对于foo的每个值,我都有一个返回truefalse的函数。如何查询foo的值使函数返回true的所有文档?

3 个答案:

答案 0 :(得分:3)

如果您需要检查字符串字段的值是否为多个值之一,则需要$in modifier

db.collection.find( { field : { $in : array } } );

它工作得很快并且使用索引(如果可能的话)。

如果您的 字段 是一个数组并且您传递了一个字符串,请使用此语法。

db.collection.find({array_field : string_value});

它将检查数组中的每个元素,如果它们中的任何一个与您的字符串匹配,它将返回文档。

答案 1 :(得分:1)

您可以使用$where

示例:

db.myCollection.find( { $where: "this.a > 3" });
db.myCollection.find( "this.a > 3" );
db.myCollection.find( { $where: function() { return this.a > 3;}});

注意,这是在Javascript中运行的。这意味着两件事。

  1. 您可以将任意Javacript放入$where表达式(函数形式)。

  2. 它会比常规查询慢得多。

答案 2 :(得分:1)

这实际上取决于功能是什么以及如何使用它。任何给定记录的函数是否常量?它甚至是您可以在数据库服务器上评估的功能吗? ...

在极端情况下,如果您需要经常检查此值,您可能会创建一个仅在f(foo)为true时存在的字段,然后在该字段上创建稀疏索引。

$哪里可能是您正在寻找的解决方案,但根据访问模式,可能会有更好的解决方案。