2014-05-30 19 views
2

我正在使用nodejs来查询mongodb并希望使用自定义字段名输出json。在NodeJS中,如何使用不同的字段名输出mongodb的结果?

例如,从原来的MongoDB JSON也许

{id:1, text:"abc"} 

想我将它输出为

{ObjectID:1, DisplayText:"abc"}; 

我理解的MongoDB有$项目运营商在它的总框架,但不知道如何在NodeJS中使用它们。我使用

MongoDB的包的NodeJS是

var mongo = require('mongodb'); 
    var monk = require('monk'); 
    var db = monk('server:port/mydb'); 

欣赏这个任何意见。

+0

也许这会让你开始:http://stackoverflow.com/questions/16252208/how-to-use-regex-in-mongodb-aggregation-query-within-match –

+0

谢谢,约翰。你会知道使用哪个mongodb软件包吗?我用类似的实现并得到TypeError:对象#没有方法'集合'。 – Lee

回答

9

如果你是因为你看起来是那么你就可以访问底层节点本地驱动程序的集合类型使用和尚通过.col访问您选择的集合对象上:

var db = require('monk')('localhost/test') 
    , collection = db.get('example'); 

    collection.col.aggregate(
    [ 
     { "$project": { 
     "_id": 0, 
     "ObjectID": "$_id", 
     "DisplayText": "$text" 
     }} 
    ], 
    function(err,result) { 

     console.log(JSON.stringify(result, undefined, 4)); 

    } 
); 

注意方法,比如以这种方式检索到的不作为标准修士集合对象包装在承诺对象中。但至少这会告诉你如何访问和使用$project重新塑造你的文档。

+0

谢谢,尼尔。这似乎工作虽然我得到一个不同的错误:“聚合结果超过最大文件大小(16MB)”,但我相信这应该是一个单独的问题,我应该工作。 – Lee

+1

@ user3492125现在,它试图将整个集合输出到本质上是一个数组的地方,所以如果您向客户端发送响应,您可能不希望整个集合。还有其他一些方法,但是现在可能最具体的是管道运算符[**'$ match' **](http://docs.mongodb.org/manual/reference/operator/aggregation/match/)以减少结果。至少你知道如何现在和僧侣一起使用聚合。如果你有他们,随意发布其他问题堆栈溢出。 –

+0

尼尔,你有一个敏锐的头脑。这正是我之前错过的。谢谢。 – Lee

相关问题