Mongodb点符号通配符?

标签 mongodb syntax

我有一组用户,每个用户都可能订阅一项或多项服务。每个服务都有一些元数据,包括用户对该服务的信用数量。

如果我无法知道服务对象的键是什么,我如何才能找到所有对某些服务的积分少于 50 的用户对象?

从概念上讲,它会是这样的,这是行不通的:

db.users.find({services.*.credits : {$lt : 50}})

用户集合:

   {
_id: 4f0ea25072139e4d2000001f,
services : {
    a : { credits : 100, score : 2000 },
    b : { credits : 200, score : 300 },
    c : { credits : 10, score : 1300 }
    }
},
{
_id: 4f0ea25072139e4d2000001f,
services : {
    f : { credits : 68, score : 14 },
    q : { credits : 1000, score : 102 },
    z : { credits : 59, score : 352 }
    }
}

我想做的另一个例子,如果这里不清楚,在这里解释:http://www.mongodb.org/display/DOCS/Advanced+Queries#comment-346075854

最佳答案

这是对您问题的实际答案。

如果您无法知道服务对象的键是什么,如何找到所有对某项服务的积分少于 50 的用户对象。

使用 $where 查询:

db.users.find({
    $where: function () {
        for (var index in this.services)
            if (this.services[index].credits < 50)
                return this;
    }
});

关于Mongodb点符号通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840342/

相关文章:

c# - 为什么 "SELECT * FROM user"会抛出语法错误?

Java 惰性求值语义

ruby - Mongo 可以实现多线程吗?

mongodb - 如何在 Mongo 中计算 future 的数据库大小?

mongodb - 使用Go获取MongoDB中的所有模型树子节点

java - Mongo Connection 在 RESTful API 中创建多次且从未发布

php - MongoDB PHP 限制不起作用

ruby - <<-CONSTANT 是做什么的?

bash - 一口气测试多个文件条件(BASH)?

c# - 空属性声明的区别