在我的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"?
的字段的不同值的正确语法是什么?答案 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;