如何避免MongoDb流星应用程序中的重复条目

时间:2015-05-15 11:13:04

标签: mongodb meteor

如何避免Meteor应用程序中mongoDb中的重复条目。

命令:db.products.find({},{"TEMPLATE_NAME": 1},{unique : true})

{ "_id" : ObjectId("5555d0a16ce3b01bb759a771"), "TEMPLATE_NAME" : "B" }
{ "_id" : ObjectId("5555d0b46ce3b01bb759a772"), "TEMPLATE_NAME" : "A" }
{ "_id" : ObjectId("5555d0c86ce3b01bb759a773"), "TEMPLATE_NAME" : "C" }
{ "_id" : ObjectId("5555d0f86ce3b01bb759a774"), "TEMPLATE_NAME" : "C" }
{ "_id" : ObjectId("5555d1026ce3b01bb759a775"), "TEMPLATE_NAME" : "A" }
{ "_id" : ObjectId("5555d1086ce3b01bb759a776"), "TEMPLATE_NAME" : "B" }

我想只检索唯一的模板名称并在HTML页面上显示它们。

2 个答案:

答案 0 :(得分:5)

使用 aggregation framework ,其中您的管道阶段分别由$group$project运算符组成。 $group运算符步骤按给定键对输入文档进行分组,从而在结果中返回不同的文档。然后,$project运算符会重新整形流中的每个文档,例如添加新字段或删除现有字段:

db.products.aggregate([
    {
        "$group": {
            "_id": "$TEMPLATE_NAME"
        }
    },
    {
        "$project": {
            "_id": 0,
            "TEMPLATE_NAME": "$_id"
        }
    }
])

结果:

/* 0 */
{
    "result" : [ 
        {
            "TEMPLATE_NAME" : "C"
        }, 
        {
            "TEMPLATE_NAME" : "A"
        }, 
        {
            "TEMPLATE_NAME" : "B"
        }
    ],
    "ok" : 1
}

然后,您可以使用 meteorhacks:aggregate package 在Meteor中实现聚合:

使用

添加到您的应用中
meteor add meteorhacks:aggregate

然后只需使用 .aggregate 功能,如下所示。

var products = new Mongo.Collection('products');
var pipeline = [
        {
            "$group": {
                "_id": "$TEMPLATE_NAME"
            }
        },
        {
            "$project": {
                "_id": 0,
                "TEMPLATE_NAME": "$_id"
            }
        }
    ];
var result = products.aggregate(pipeline);

- 更新 -

不使用聚合的替代方法是使用 underscore 的方法从集合的find方法返回不同的字段值,如下所示:

var distinctTemplateNames = _.uniq(Collection.find({}, {
    sort: {"TEMPLATE_NAME": 1}, fields: {"TEMPLATE_NAME": true}
}).fetch().map(function(x) {
    return x.TEMPLATE_NAME;
}), true)

这将返回一个包含不同产品模板名称["A", "B", "C"]

的数组

您可以查看一些详细解释上述方法的教程: Get unique values from a collection in Meteor METEOR – DISTINCT MONGODB QUERY

答案 1 :(得分:4)

您可以使用mongodb的distinct,如:

db.collectionName.distinct("TEMPLATE_NAME")

此查询将返回不同TEMPLATE_NAME

的数组