如何使用Node MongoClient查找MongoDB集合中字段的不同值

时间:2015-05-31 17:17:56

标签: node.js mongodb

在我的MEAN应用程序中,我需要找到名为" DataFields"的字段的不同值。来自我的收藏" Fixed_Asset_Register",使用(非芒果)MongoClient:

var mongodb = require('mongodb');

var assert = require('assert');

var MongoClient = mongodb.MongoClient;

MongoClient.connect(url, function (err, db) {
    if (err) {
        console.log('Unable to connect to the mongoDB server. Error:', err);
    } else {
        console.log('Connection established to', url);

        var collection = db.collection('Fixed_Asset_Register');
        var distictDataFieldsValue = ?

}

获取名为" DataFields"?

的字段的不同值的正确语法是什么?

2 个答案:

答案 0 :(得分:5)

我使用collection.distinct解决了这个问题:

collection.distinct("DataFields",(function(err, docs){
            console.log(docs);
            assert.equal(null, err);
            db.close();
        }))

答案 1 :(得分:0)

您也可以通过 aggregation framework 执行此操作。合适的聚合管道由$group运算符阶段组成,该阶段通过DataFields键对文档进行分组,并创建一个聚合字段count,用于存储此分组生成的文档。累加器运算符为$sum

下一个管道阶段是$match运算符,然后过滤出count为1的文档来描述区别。

最后一个管道运算符$group然后对这些不同的元素进行分组,并通过$push运算符将它们添加到列表中。

最后,您的聚合将如下所示:

var collection = db.collection('Fixed_Asset_Register'),
    pipeline = [
    {
        "$group": {
            "_id": "$DataFields",
            "count": {"$sum": 1}
        }
    },
    {
        "$match": { "count": 1 }
    },
    {
        "$group": {
            "_id": 0,
            "distinct": { "$push": "$_id" } 
        }
    }],
    result = collection.aggregate(pipeline).toArray(),
    distictDataFieldsValue = result[0].distinct;