1

如果我有如下文件集合:

{a:'1', b:'2', c:'3', d:'a'},
{a:'1', b:'2', c:'1', d:'b'},
{a:'1', b:'2', c:'3', d:'c'},
{a:'1', b:'3', c:'1', d:'d'},
{a:'1', b:'2', c:'3', d:'e'},
{a:'2', b:'2', c:'1', d:'f'}

获取属性 a、b、c 的所有唯一组合的最有效的 mongo 查询是什么?可能吗?结果看起来像:

{a:'1', b:'2', c:'3', d:*},
{a:'1', b:'2', c:'1', d:*},
{a:'1', b:'3', c:'1', d:*},
{a:'2', b:'2', c:'1', d:*}

*= 不在乎

谢谢,感谢您的帮助。

4

2 回答 2

1

这种操作的常用工具是distinct函数。不幸的是,MongoDBdistinct只能过滤一个字段(例如db.collection.distinct("a"))。各种解决方法都是可能的,例如使用aggregateor group

聚合示例:

db.collection.aggregate({
    $group: {
        _id: {
            a: "$a", 
            b: "$b", 
            c: "$c"
        }
    }
})

您将不得不从结果中提取信息,但我想这不是一个大问题。

示例:

db.collection.group({
    key: {
        a: 1, 
        b: 1,
        c: 1
    }, 
    reduce: function (current, result) {}, 
    initial: {}
})
于 2013-07-12T14:21:54.560 回答
0

你可以试试这样的

db.<your collection>.aggregate([{$group:{"a": "$a", "b": "$b", "c": "$c"}}])

也试试这个链接mongodb get distinct records

我不是 MongoDB 专业人士,但我认为您也可以使用 js 函数,如下所示:

a = {}
db.<your collection>.find().forEach(
    function(x)
    {
        if (a[[x.a, x.b, x.c]] == null) {
            a[[x.a, x.b, x.c]] = true;
            printjson(x);
        }
    }
)
于 2013-07-12T14:11:15.783 回答