Tag: couchdb

使用CouchDB和nano.js进行callback和返回

我试图用nano重新编写一个可重用的数据库调用库。 db.view('list', 'people', function(error, data) { if (error == null) { res.render('people/index', { people: data.rows }); } else { // error } }); 有多个请求时,这可能会相当混乱: db.view('list', 'people', function(error, people) { db.view('list', 'items', function(error, items) { db.view('list', 'questions', function(error, questions) { db.view('list', 'answers', function(error, answers) { … res.render('people/index', { people: people.rows, items: items.rows, questions: questions.rows … 所以,这个想法是创build一个函数: […]

从nodejs中的Cloudant数据库中删除一个文档

这可能是一个基本的问题,但我已经浏览了github Cloudant库和Cloudant文档,并从数据库中删除了一个特定的文档,但是没有详细解释。 这是非常令人沮丧的。 我最近删除一个文档是使用一个http请求,而不是函数Cloudant库提供,我不断得到一个“文档更新冲突”即使我通过文档的_rev。 任何人都可以解释一下,使用nodejs从一个Cloudant数据库中删除一个文档,并用一个例子来解决这个问题。 谢谢。

地理空间应用:mySql vs CouchDB vs其他

我正在谷歌地图上开发一个应用程序,并检出各种选项来存储和检索边界框中的空间信息。 最初我以为MySql不是一个好的select,但在检查http://dev.mysql.com/doc/refman/5.6/en/spatial-analysis-functions.html和http://code.google.com/apis /maps/articles/phpsqlsearch.html ,看起来像我可以使用MySql,它支持我的用例。 我也用geocouch来评估node.js和couchdb。对于像socket.io这样的模块,geo等看起来也是一个不错的select。 请查阅“GEO,CouchDB和Node.js入门”一书。 我的应用程序将是1页的应用程序,我不会预见,如果我将来需要任何时候rdbms。 我也看到了这个 – http://nodeguide.com/convincing_the_boss.html ,这让我有点担心是否去node.js-geocouch …. 如果您的下一个应用程序的体系结构像NoSQL成分的食谱一样,请暂停一下并阅读此内容。 是的,Redis,CouchDB,MongoDB,Riak,Casandra等都看起来很诱人,但是红苹果Eve也忍不住。 如果您已经在使用node.js来承担技术风险,那么您不应该使用更多可能还不完全了解的技术。 当然,select一个面向文档的数据库有合法的用例。 但是如果你试图在你的软件之上build立一个业务,坚持保守的数据库技术(比如postgres或者mysql)可能会超过满足你内心的书呆子和给你的朋友留下印象的好处。 你有什么意见 ?

如何用开始date和结束date查询CouchDB数据

在我的节点应用程序中,我使用Cradle库将数据保存在CouchDB中。 现在我想用指定的开始date和结束date来获取存储的数据。 我怎样才能做到这一点。 我已经添加了如下devise文档。 这是对的吗? 如何将我的parameter passing给这个函数? function (doc) { if (doc.date) { var key = [doc.start, doc.end]; emit(key, doc); } } 文件结构 { "_id": "58113f948561d38b1eba8ba343432c45", "_rev": "1-be4f3d2fd93a8941659c73333941561d", "date": "2013-04-29T06:36:29.165Z", "name":"sdasd", "age":"20" } 上面的devise文档,我正在像下面查询 var startDate = '2013-04-27T08:41:23.559Z'; var endDate = '2013-04-29T08:41:23.559Z'; db.view('data/byDate', { key: [startDate, endDate] }, function(err, doc) { if (!err) { console.log(doc.length); […]

重复性工作订单系统的体系结构

我希望得到关于devise一个必须支持反复工作的工作订单系统的build议。 例如,pipe理员需要设置一个工单,以每6个月为单位重复一次。 我使用的NodeJS作为服务器,一个noSQL数据库(couchDB)的存储和elasticsearch作为search引擎。 这是我第一次尝试在文档结构上支持这个function: Base Workorder { _id: 1 … Unrelated fields "recurInValue" : 6, "recurInUnit" : "months" "lastRecurredOn": 1368914552527, "numOcurrences": 1, "numTimesToRepeat": null, "stopOn" : 1384920941195, "createdAt" 1364936177618 } Occurrence Workorder { _id: 2 … Unrelated fields "recurFrom" : 1 } Occurrence Workorder { _id: 3 … Unrelated fields "recurFrom" : 1 } 我目前的CRUD计划是: […]

如何在摇篮式通话中创build多个附件

我正在研究一个nodejs应用程序,并将两个附件插入带有摇篮的couchdb。 目前我正在插入第一个附件,获取更新的文档,然后插入更新的_rev键的第二个附件。 这是低效的,使我不得不作出两个独立的电话couchdb。 有没有办法创build多个附件与一个摇篮调用?

NodeJS CouchDB长轮询崩溃

当然,我有一个通过NodeJS上的ExpressJS发布的web应用程序。 它使用CouchDB作为数据源。 我实现了长轮询以保持应用程序在所有用户之间始终保持同步。 要做到这一点,我使用以下逻辑: 用户login到应用程序,并通过Express路线向Node发起初始的长轮询请求。 节点轮stream向CouchDB发出长轮询请求。 当Couch更新时,它响应来自Node的请求。 最后Node响应浏览器。 简单。 但是,发生的事情是,当我刷新浏览器时, 每五次刷新就会冻结一次 。 咦? 非常奇怪。 但是,即使在我的testing环境中,我也可以一遍又一遍地重现它。 每五次刷新一次,冻结Node并导致应用程序冻结。 重启节点解决了这个问题。 拉了很多头发后,我想通过改变这个问题来解决它: app.get('/_changes/:since*', security, routes.changes); 对此: app.get('/_changes/:since*', security, function () { routes.changes }); 然而,经过进一步的testing,这只是没有运行routes.changes。 所以没有实际解决scheme 任何想法为什么长期投票CouchDb从Node会做这样一个奇怪的事情? 在第五次刷新,我可以在我的路由代码的第一行节点中有一个断点,它永远不会被击中。 但是,在浏览器中,我可以断开对长时间轮询的节点的请求,并且它似乎熄灭。 这就像Node由于某种原因不接受连接 我应该以不同的方式接近从Node到CouchDB的长轮询吗? 我正在使用feed = longpoll,我应该做feed还是连续的? 如果我将couchdb中的changes_timeout调低到5秒,它就不能解决问题,但是它可以更容易地处理,因为冻结只会持续5秒钟。 所以这似乎表明节点不能处理有几个待处理的请求。 也许我会尝试一个连续的饲料,看看会发生什么。 self.getChanges = function(since){ 浏览器: $.ajax({ url: "/_changes/" + since, type: "GET", dataType: "json", […]

Nodejs从CouchDBstreamvideo,并显示在video标签

我正在尝试使用NodeJS中的纳米中间件从CouchDBstream式传输video。 video在浏览器上收到。 我不知道如何在客户端上传输它,以及如何在HTML标签中显示它。 这里是我的NodeJS代码来读取从我从这里find的CouchDB的附件: if (req.headers.range) { var stream = db.attachment.get(docid, docname, {Range: req.headers.range}); stream.on('response', function(response) { var start = req.headers.range.replace(/bytes=/, "").split("-")[0]; var end = response.headers['content-length']; res.writeHead(206, { 'ETag': response.headers.etag, 'Content-Range': 'bytes ' + start + "-" + (end – 1) + '/' + end, 'Accept-Ranges': 'bytes', 'Content-Length': end – start, 'Content-Type': response.headers['content-type'] }); }); […]

使用nodejs构buildCouchDB

有没有人有使用真正的DAL的CouchDB的经验? CouchDB不像其他任何数据存储那里,特别是。 由于其观点的概念,增加了一个有趣的dynamic数据业务逻辑分离…更不用说修改控制应用程序源代码。 注意:像Nano这样的库不是DAL。 它们类似于数据库驱动程序。 直接从业务逻辑中使用Nano会将应用程序绑定到CouchDB。 不是我想要的。 相反,我的定制DAL使用纳米作为驱动程序,但完全将业务逻辑与纳米分离。 问题:我应该阅读的最佳实践或文件? 任何可以在MongoDB和CouchDB之间切换的常见DAL(作为我尝试做的起点)?

如何在couchdb中获得单个请求的所有修订文件?

我在我的快速应用程序中使用nano.js作为couchdb驱动程序。 我设法得到像这样的命令文档修订的ID db.get(id, { revs_info: true }, function(err, inventory){ res.send(inventory); }) 它返回最新版本_revs_info。 不幸的是,_rev_info只包含版本号和可用性状态。 { _id: 'doc', _rev: '3-825cb35de44c433bfb2df415563a19de', _revs_info: [ { rev: '3-825cb35de44c433bfb2df415563a19de', status: 'available' }, { rev: '2-7051cbe5c8faecd085a3fa619e6e6337', status: 'available' }, { rev: '1-967a00dff5e02add41819138abb3284d', status: 'available' } ] } 那么如何在couchdb中用单个请求获取所有修订版本的文件?