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

gar*_*ima 4 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" }
Run Code Online (Sandbox Code Playgroud)

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

chr*_*dam 5

使用聚合框架,其中您的管道阶段分别由$group$project运算符组成.的$group操作者步骤组由给定键的输入文件,从而将在结果返回不同的文档.然后,$project操作员重新整形流中的每个文档,例如添加新字段或删除现有字段:

db.products.aggregate([
    {
        "$group": {
            "_id": "$TEMPLATE_NAME"
        }
    },
    {
        "$project": {
            "_id": 0,
            "TEMPLATE_NAME": "$_id"
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

结果:

/* 0 */
{
    "result" : [ 
        {
            "TEMPLATE_NAME" : "C"
        }, 
        {
            "TEMPLATE_NAME" : "A"
        }, 
        {
            "TEMPLATE_NAME" : "B"
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用meteorhacks:aggregate包来实现Meteor中的聚合:

添加到您的应用中

meteor add meteorhacks:aggregate
Run Code Online (Sandbox Code Playgroud)

然后只需使用.aggregate如下功能.

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

- 更新 -

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

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

;

这将返回具有不同产品模板名称的数组 ["A", "B", "C"]

您可以查看一些详细解释上述方法的教程:从MeteorMETEOR - DISTINCT MONGODB QUERY中的集合中获取唯一值.

  • @MarkusWMahlberg Meteor在MongoDB中尚不支持. (2认同)