在我的数据库中,我有包含属性foo
的文档。对于foo
的每个值,我都有一个返回true
或false
的函数。如何查询foo
的值使函数返回true
的所有文档?
答案 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中运行的。这意味着两件事。
您可以将任意Javacript放入$where
表达式(函数形式)。
它会比常规查询慢得多。
答案 2 :(得分:1)
这实际上取决于功能是什么以及如何使用它。任何给定记录的函数是否常量?它甚至是您可以在数据库服务器上评估的功能吗? ...
在极端情况下,如果您需要经常检查此值,您可能会创建一个仅在f(foo)为true时存在的字段,然后在该字段上创建稀疏索引。
$哪里可能是您正在寻找的解决方案,但根据访问模式,可能会有更好的解决方案。