{class:“技术类” title=“xxxxxx” content:“xxxxxx” } {class:“招聘类” title=“xxxxxx” content:“xxxxxx” } {class:“分享类” title=“xxxxxx” content:“xxxxxx” } {class:“分享类” title=“xxxxxx” content:“xxxxxx” } {class:“招聘类” title=“xxxxxx” content:“xxxxxx” }
我怎么通过查询一次性取出结果是:
[ {class:“技术类”}, {class:“招聘类”}, {class:“分享类”}]
find({},{‘class’:1});
@luanxuechao 这个语句是什么意思呢?
class $in [1,2,3] ?是不是
@lwwen db.test.find({},{‘class’:1});返回的就是题目上的结果
@luanxuechao 会返有所有的,不是过滤重复的。
我是有印象在哪地方看过写法,现在要用,找不到了。
@koroshi 错了。
@mrlong mongoose好像有个distinct,理论原生应该有个对应的把
@mrlong 不好意思没看清楚
8楼 正解
谢谢了,你这个对的.
{ “_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” )
[ “A”, “B” ]
distinct(“class”)
@mrlong 补个完整版。
官方文档传送门
下面是我的具体实现,使用的mongodb模块是mongodb
。
distinct(key, where, opts) {
let that = this;
return new Promise((resolve, reject) => {
const MongoClient = require('mongodb').MongoClient;
const url = that.config.mongo.addr;
const username = that.config.mongo.user;
const password = that.config.mongo.password;
MongoClient.connect(url, function(err, db) {
opts = opts || {};
db.collection(that.config.mongo.collection).distinct(key, where, opts, function(err, re) {
if (err) {
reject(err);
} else {
resolve(re);
}
db.close();
});
})
})
}
建议去学习下aggregate,比这复杂的多的需求都能解决,当前这个一个group就搞定