mongodb通过web服务收集c#

时间:2014-01-16 14:23:31

标签: asp.net node.js extjs mongodb-.net-driver

我试图将monogdb查询的结果返回到web应用程序中。最简单的初始只是返回完整的集合,因为您将在mongodb控制台中通过访问数据库的项目中的webservice调用看到它:

> db.usercollection.find()
 { "_id" : ObjectId("52d2f2b3c60804b25bc5d2ca"), "username" : "testuser1", "email
   " : "testuser1@testdomain.com" }
 { "_id" : ObjectId("52d2f2f9c60804b25bc5d2cb"), "username" : "testuser2", "email
   " : "testuser2@testdomain.com" }
 { "_id" : ObjectId("52d2f2f9c60804b25bc5d2cc"), "username" : "testuser3", "email
   " : "testuser3@testdomain.com" }
 >

我想将生成的json放入extjs网格中。我正试图找出它是否有效,但第一个问题实际上是如何返回上面的结果:

 <WebMethod()> _
 <ScriptMethod(UseHttpGet:=True, ResponseFormat:=ResponseFormat.Json)> _
Public Function getDBData() As String

    Dim response As String = String.Empty

    mongo.Connect()
    Dim db = mongo.GetDatabase("nodetest1")

    Using mongo.RequestStart(db)
        Dim collection = db.GetCollection(Of BsonDocument)("usercollection").FindAll()

        response = collection.Collection.ToString

        Return response
    End Using

我没有看到我想要的结果:

 var newStore = Ext.create('Ext.data.JsonStore', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url: 'http://localhost:52856/WCFService/WebService1.asmx/getDBData',
        reader: {
            type: 'json',
            root: 'd',
            idProperty: '_id',
            successProperty: 'success'
        },
        success: function (response, options) {
            var s = response.responseText;
            Ext.MessageBox.alert(s, 'LA LA LA');
            newStore.loadData(s);
        },
        failure: function (response, options) {
            Ext.MessageBox.alert('FAILED AGAIN', 'SUCKS');
        }
    }
});

我尝试按如下方式添加root:

        response = "{""d"":" + response + "}"

        Return response

第二种方法是直接从node.js调用服务,但不显示如何设置结果:

 Ext.Ajax.request({
    url: 'http://localhost:3000/userlist',
    method: 'GET',
    success: function (response, options) {
        var s = response.responseText;
        Ext.MessageBox.alert(s, 'WOO WOO');
        myStore.loadData(s);
    },
    failure: function (response, options) {
        Ext.MessageBox.alert('FAILED MOFO', 'Unable to GET');
    }
});

这就是我的回忆:

nodetest1.usercollection

查看:用户列表

extends layout

block content
 h1.
  User List
 u1
 each user, i in userlist
    li
       a(href="mailto:#{user.email}")= user.username

默认路线:

exports.index = function(db) {
return function(req, res) {
 var collection = db.get('usercollection');
 collection.find({},{}, function(e,docs){
      res.render('userlist', {
           "userlist" : docs
      });
 });
};

};

我离开这里还是有人能看出我做错了什么。

1 个答案:

答案 0 :(得分:2)

致电FindAll会返回MongoCursor

将其转换为JSON格式的快捷方法是:

Return collection.ToArray().ToJSON()

您可以使用以下技术循环遍历每个结果:

For Each document in collection
   ' do something with each document
Next document

根据结果的大小,您可能会发现返回响应会占用大量服务器内存,并且需要花费大量时间在JavaScript中进行传输和处理。

此外,对于生产代码,我建议只创建一次与MongoDB的连接。连接是线程安全且可重用的(并使用连接池来支持多个客户端)。打开和关闭连接非常昂贵。&#34;