如何避免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页面上显示它们.
使用聚合框架,其中您的管道阶段分别由$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"]
您可以查看一些详细解释上述方法的教程:从Meteor和METEOR - DISTINCT MONGODB QUERY中的集合中获取唯一值.
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |