使用mongoose编写mongoDb查询来创建节点api

时间:2016-05-24 12:42:38

标签: json node.js mongodb mongoose

我有一些mongoDb集合'教室'和'学生'的形式: 教室:

{ 
    "_id" : ObjectId("56c7219dbd5f92cd78ae4b7e"), 
    "name" : "My Students", 
    "user" : ObjectId("56c7218cbd5f92cd78ae4b7c"), 
    "updatedAt" : ISODate("2016-02-19T14:07:25.965+0000"), 
    "createdAt" : ISODate("2016-02-19T14:07:25.965+0000"), 
    "students" : [
        ObjectId("56dbb26cff34aa686c0d9d25"), 
        ObjectId("56f7c2bf1982aa9219ae8843")
    ], 
    "role" : "user", 
    "allowDelete" : false, 
    "__v" : NumberInt(0)
}

学生:

{ 
    "_id" : ObjectId("56dbb26cff34aa686c0d9d25"), 
    "email" : "1989manjari@gmail.com", 
    "createdBy" : ObjectId("56c7218cbd5f92cd78ae4b7c"), 
    "classRoom" : ObjectId("56c7219dbd5f92cd78ae4b7e"), 
    "mentorEmail" : "gauravatbits@gmail.com", 
    "studentId" : ObjectId("56ced54303b7cb7b0eda9862"), 
    "status" : true, 
    "updatedAt" : ISODate("2016-03-11T15:32:36.806+0000"), 
    "autoAdd" : true, 
    "createdAt" : ISODate("2016-03-06T04:30:36.073+0000"), 
    "__v" : NumberInt(0)
}

我的查询是:

id_list = db.classrooms.distinct("students");
db.students.find({_id: {$in: id_list}, studentId:{$exists:false}},{email:1, mentorEmail: 1}).pretty()

现在我想在节点api中为此响应创建一个端点。所以我想知道如何在Mongoose中编写这些查询并创建端点,如:app.get('/ api / myquery')来获取json结果。

P.S。 :是否可以这样做,而无需在Mongoose中创建模式,因为我也有一些具有大号的集合。的领域(38个领域)。我只想通过在现有集合中应用查询来获取一些json数据。

2 个答案:

答案 0 :(得分:0)

像mongoose这样的东西

只是伪代码

var model = mongoose.model("collection", mongooseSchema)

app.get('/api/myquery', function(){
    model.find({_id : id_list}, "email mentorEmail", function(err, data){
       if(err)throw err;
       res.json(data) // maybe use JSON.stringify() if didnt get json but that sets application/json in header of HTTP
    })
})

答案 1 :(得分:0)

你可以直接在mongoose中插入jsons,但你应该记住,只有那些在mongoose模型中提到的数据才会被读取。保持38个字段不是一个问题,只需直接插入即可。