【问题标题】:MongoDB select distinct and whereMongoDB选择不同的地方
【发布时间】:2013-10-10 11:27:12
【问题描述】:

所以我正在做一个选择不同的工作,但我还想添加另一个键。

$data = $this->db->command(array("distinct" => "scores","key"=>"target_user"));

我需要这样的东西:SELECT DISTINCT target_user FROM scores where seen = 1

可以在mongo中完成吗?

【问题讨论】:

标签: php mongodb nosql


【解决方案1】:

您可以通过使用 distinct 查询来执行以下操作:

db.scores.distinct("target_user", {"seen":1})

使用聚合框架运行不同的查询如下所示。

将以下记录插入 MongoDB。

db.scores.insert({target_user:"a",seen:1, name:"name1"})
db.scores.insert({target_user:"a",seen:0, name:"name1"})
db.scores.insert({target_user:"b",seen:1, name:"name2"})
db.scores.insert({target_user:"c",seen:1, name:"name3"})
db.scores.insert({target_user:"d",seen:0, name:"name4"})

然后通过运行以下聚合查询,您可以找到不同的 target_user's where seen = 1。请注意,它还将返回名称字段。

db.scores.aggregate(
{$match:{seen:1}},
{$group: {_id : "$target_user", name: {$first:"$name"}}},
{$group : {_id : "$_id", name: {$first:"$name"}}}
);

那么结果如下:

"result" : [
    {"_id" : "a","name" : "name1"},
    {"_id" : "b","name" : "name2"},
    {"_id" : "c","name" : "name3"}
]

【讨论】:

  • 它有效,但它不会返回数据库中的所有键,只返回target_user,我也可以获取其他值吗?
  • 正如 Sammaye 提到的,您无法获得具有不同查询的所有字段。您必须运行聚合查询。
  • 嗯,我不明白我猜你的意思..首先我必须查询不同的值,然后再查询同一集合中的查询,但这样做:选择 *其中 X IN(不同的值)
  • 你能给我一个aggreagte的简短例子
  • 我添加了聚合查询示例。
【解决方案2】:

当然可以。不确定您使用的是哪个数据库层,但在本机 MongoDB 驱动程序中是可能的

docs

$mongoCollection->distinct("target_user", ['seen' => 1]);

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2016-07-16
    • 2010-10-29
    相关资源
    最近更新 更多