mongodb 中 distinct 的作用是:获取集合中指定字段的不重复值,并以数组的形式返回
语法:
db.collection_name.distinct(field,query,options)
field——指定要返回的字段(String)
query——条件查询(document)
options——其他选项(document)
例如:
{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }
>db.inventory.distinct("dept") //获取dept字段的不重复值
结果:["A","B"]
>db.inventory.distinct("item.sku") //获取item子字段sku的不重复值
结果:["111","222","333"]
>db.inventory.distinct("item.sku",{dept:"A"}) //满足dept为A的item子字段sku的不重复值
结果:["111","333"]
但是distinct只能获取不重复值,不能去除重复项,保留不重复记录
以下方法去除重复项:
进入mongo命令,切换至指定数据库use databaseName,具体命令可参考https://blog.csdn.net/cat_book_milk/article/details/79161720
>var obj1 = db.test.find({"field_name":""});//此处可添加查询条件
>while(obj1.hasNext()){
var obj2 = db.test.find();
var doc1 = obj1.next();
while(obj2.hasNext()){
var doc2 = obj2.next();
if(doc1.fieldName == doc2.fieldName){
db.test.remove({"fieldName":doc1.fieldName});
}
}
db.test.insert(doc1);
}