用于比较字段值的Mongoose查询

时间:2014-07-28 23:31:03

标签: node.js mongodb mongoose

说我有以下方案

TestSchema{
 val1:Number,
 val2:Number}

是否可以编写一个查询,其中返回的所有结果都是val1 = val2?

如果是这样,有没有办法在填充时使用它? (也许在opts对象的匹配字段内?)

3 个答案:

答案 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更快。