![](/img/trans.png)
[英]Want to get object of reference collection by _id in mongodb node.JS
[英]Mongodb collection object caching in Node.js
我正在嘗試在Node.js中實現對MongoDB數據庫的RESTful(ish)接口。 根據文檔 ,基本成語是這樣的:
var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db;
var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('exampleDb', server);
db.open(function(err, db) {
if(!err) {
db.collection('test', function(err, collection) {
// do stuff with collection
});
}
});
因此,基本的數據庫訪問涉及三個對象(服務器,數據庫和集合)。 我的問題是其中哪些可以/應該在啟動時加載並緩存在某個地方以供每個http請求重用,以及哪些/必須在每個請求中重新創建。 我的假設是服務器和數據庫對象可以長期存在是可以的,但是我對收集對象不太確定。
此類收集可能是長期存在的,尤其是在服務器無法運行的情況下,如果有大量這樣的收集。 這只是您正在使用的內存。
為什么不呢? 集合對象本身不占用太多內存,它提供了與mongodb交互,查詢,保存等所有功能。 在每個請求上重新創建它,然后再將其刪除是沒有意義的。
通常,從open進行的回調應該啟動邏輯來啟動應用程序/服務器的其余部分。 然后,您只需保留該數據庫引用,並根據每個請求調用db.collection。 我通常可以提供一項服務,可以調用該服務從REST資源獲取數據庫引用,以保持一切清潔。 同樣,這可能取決於應用程序中的數據庫/集合用法。
保存所有三件事(服務器連接,數據庫和集合),然后啟動您的應用程序。 Mongoose之類的 MongoDB ODM會自己做,以防萬一。 您可能想使用異步來避免將代碼嵌套得太深。
就個人而言,我使用mongo-lite來完成var db = require('mongo-lite').connect('mongodb://localhost/exampleDb', ['test']);
之后,我可以擺弄我的收藏集db.test。 這為我節省了很多樣板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.