说我有以下方案
TestSchema{
val1:Number,
val2:Number}
是否可以编写一个查询,其中返回的所有结果都是val1 = val2?
如果是这样,有没有办法在填充时使用它? (也许在opts对象的匹配字段内?)
答案 0 :(得分:1)
我认为你想要的是$where operator。使用它,您至少可以返回这些字段匹配的元素。
示例:db.myCollection.find(“this.val2 == this.val2”);
我现在不能在这个地方进行测试,所以你可能需要稍微玩一下,但这应该让你开始。
我还应该提一下,在使用$ where操作时会有很大的性能损失,因此请谨慎使用。
答案 1 :(得分:1)
您可以使用$where
运算符执行此操作。
TestModel.find({
$where: 'this.val1 <= this.val2'
}).
exec(function(err, results) {
// results here
});
您也可以将功能传递给$where
以使用结果。
正如克里斯所说,这是一项昂贵的操作,因此在部署到生产之前先测试它的工作原理。
答案 2 :(得分:1)
您可以使用aggregate
:
Test.aggregate([
// Add a field to each doc that indicates if the two fields match
{$project: {
val1: 1,
val2: 2,
isMatch: {$eq: ['$val1', '$val2']}
}},
// Filter to just those docs where they match
{$match: {isMatch: true}},
// Remove isMatch to get back the original doc
{$project: {
val1: 1,
val2: 1
}}
], callback);
您不能这样做来比较填充结果中的字段,只比较查询的集合。
这应该比使用$where
更快。