使用db.mycollection.distinct('field1','field2')和mongodb / mongoskin

时间:2014-02-19 14:18:04

标签: node.js mongodb mongoskin

我在user.js文件的导出声明中有以下行:

 db.collection('myList').distinct('field1', 'field2'), function(err, items) {
        res.json(items);
 }

db查找在mongo命令行中运行正常。但是,当我运行网页时,我得到:

 TypeError: string is not a function

我不确定如何继续这一点。我应该在返回之前以某种方式将返回值转换为字符串吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您的问题似乎没有明确定义,请考虑逻辑:

> db.info.insert({ field1: "this", field2: "that" })
> db.info.insert({ field1: "this", field2: "another" })
> db.info.insert({ field1: "this", field2: "that" })
> db.info.insert({ field1: "this", field2: "another" })
> db.info.distinct('field1', 'field2')
[ "this" ]

但你真正想要的是:

db.info.aggregate([
   {$group: {_id: { field1: "$field1", field2: "$field2" } } }
])

给出了:

{
    "result" : [
            {
                    "_id" : {
                            "field1" : "this",
                            "field2" : "another"
                    }
            },
            {
                    "_id" : {
                            "field1" : "this",
                            "field2" : "that"
                    }
            }
    ],
    "ok" : 1
}

组合字段的独特结果。

我希望我们现在正在学习。

答案 1 :(得分:0)

由于一些奇怪的原因,MongoSkin抽象并不能提供对MongoDB的独特访问权限。方法。为了让工作变得与众不同,我不得不使用原生的MongoDB集合而不是抽象的MongoSkin集合。我是这样做的


    var store = mongo.db(connectionString, ackOptions);
    store.open(function(err,resp){
         resp.collection(this.options.collection, {strict: true}, function(err, myCollection) {
            myCollection.distinct('tag',function(err,res){
                console.log(err)
                console.log(res)
            })
        });
    })