mongodb 查询问题。
发布于 7 年前 作者 mrlong 3788 次浏览 来自 问答

{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:“分享类”}]

14 回复

find({},{‘class’:1});

@luanxuechao 这个语句是什么意思呢?

class $in [1,2,3] ?是不是

@lwwen db.test.find({},{‘class’:1});返回的就是题目上的结果

@luanxuechao 会返有所有的,不是过滤重复的。

我是有印象在哪地方看过写法,现在要用,找不到了。

@koroshi 错了。

@mrlong mongoose好像有个distinct,理论原生应该有个对应的把

@mrlong 不好意思没看清楚

@koroshi

谢谢了,你这个对的.

{ “_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就搞定

回到顶部