Articles of nosql

Mongoose模式/查询最佳实践(MongoDB,node.js)

我试图在node.js应用程序中用Mongoose分解我的RDBMS思想,并且可以使用一些指导来了解最佳实践。 一个简单的例子:假设有两个集合,组织和联系人。 这是一对多的关系,他们都需要孤独。 然而,在索引方法中,我想返回一个组织对象数组,每个组织对象都有一个成员联系对象数组。 (后来我想返回一组联系人,每个联系人都有一个组织对象。) 在我看来,我误解了完成这个的最好方法。 以下是我迄今看到的选项: 将联系人与他们的IDembedded组织文档中。 索引查询可以是Organization.find({}, function(err, orgs) { orgs[n].contacts[n]…}) 。 缺点 :需要大量额外的存储空间,并且每次更改“主”联系人文档时都必须更新embedded式联系人文档。 利用Mongoose的populate / DBRef结构在两个表中存储“外键”标识符。 查询可以是: Organization.find({}}.populate('contacts').run(…) 。 缺点 :你必须在两边存储密钥。 去比较传统的“外键”路线,在联系人文件中只存储组织ID。 查询组织文档,然后查询组织查询的callback中的所有联系人,将数据组合成一个对象返回。 缺点 :多个查询和额外的处理开销(我相信我们必须独立地为这些组织find组织和联系人,然后迭代每个组织,在公共_id字段上手动匹配,将它们组合成一个新的输出对象)。 我必须错过一个更好的select。 允许#3的模式的东西,但返回所需的组合的对象,更less的开销。 注意 : asynchronous模块似乎可以帮助这个,但是这真的是唯一的/最好的方式吗?

为Node.jsembedded文档数据库

什么是Node.js最好的embedded式 NoSQL数据库? 我的node.js应用程序太小,无法使用需要额外configuration的大型数据库,如mongodb。 我试过EJDB,但是它需要太多的磁盘空间(每个logging约1.5MB)。 我也在网上search,但谷歌给了我这么多的select,这让我很困惑。 这里有一些要求: 快速和轻量级 不需要太多configuration 能够存储大量的数据(大约十万条logging,总大小以1GB为单位) 更好的包Node.js

您将如何在NoSql数据库中对customer> order> ordertem> product进行build模?

我目前正在学习Node.JS,需要实现一个数据库。 所有的Node书籍似乎都认为MongoDB是最好的解决scheme,但似乎无法摆脱像Mongo和Couch这样的NoSQL数据库,我是MS SQL Server的家伙! 所以,我明白,你可以保持结构化的数据作为logging(JSON),但我不知道你如何build模一个典型的电子商务应用程序与以下(简化)表… customers (id, name, address) orders (id, customerID, orderDate) orderItems (id, orderID, productID) products (id, title, description, image) 所以,通常我会写这样的查询(但显然更好地优化)…. SELECT Customers.name, Products.title FROM (orders INNER JOIN customers ON orders.customerID = customers.id) INNER JOIN orderItems ON orderItems.orderID = orders.id INNER JOIN products ON orderItems.productID = products.id 如果我能看到一个如何在NoSQL数据库中工作的例子,那么我可能会开始“得到它”。 或者,我只是坚持使用MSSQL服务器或MySql,它们都与Node兼容吗?

在mongodb和nodejs中build模博客和评级

我有一个博客集合,包含用户给他们的标题,正文和集合评级。 另一个收集“评级”,其架构参考博客,用户评估(如果他根据所有评级)他们的ObjectIdsforms和评级,即+1或-1。 当一个特定的用户按照“最新的第一个”顺序浏览博客时(比如说,每个页面有40个blogs[0]称他们为blogs[0]到blogs[39] )。我必须检索与这个特定用户有关的评级文件,这40个博客,如果在所有的用户评价他们,并通知他给了这些博客什么评级。 我试图提取一个特定用户的博客引用objectIds位于blogs[0]._id和blogs[39]._id之间的所有评级文件,在我的情况下返回空列表。 可能是objectIds不能使用$lt和$gt查询进行比较。 在那种情况下,我应该怎么做呢? 我应该重新devise我的模式,以适应这种情况? 我正在使用mongoosejs驱动程序来处理这种情况。 这里是代码的相关部分,执行有点不同,但你得到的想法。 架构: Client= new mongoose.Schema({ ip:String }) Rates = new mongoose.Schema({ client:ObjectId, newsid:ObjectId, rate:Number }) News = new mongoose.Schema({ title: String, body: String, likes:{type:Number,default:0}, dislikes:{type:Number,default:0}, created:Date, // tag:String, client:ObjectId, tag:String, ff:{type:Number,default:20} }); 楷模: var newsm=mongoose.model('News', News); var clientm=mongoose.model('Client', Client); var ratesm=mongoose.model('Rates', Rates); 逻辑: newsm.find({tag:tag[req.params.tag_id]},[],{ sort:{created:-1},limit: buffer+1 […]

为什么我不能有一个Redis客户端在同一个连接中充当PUB和Sub?

我的心智模式是“聊天”,我订阅了某个频道,我可以发布消息到这个频道。

Mongoose:build议的数据库模式

好,所以我来自mySQL的背景,现在正在尝试使用nodeJS和Mongoose重build一个站点。 我的旧mySQL模式看起来像这样(简化): users user_ID user_name user_email user_password groups group_ID group_name group_description groupusers groupuser_ID group_ID user_ID comments comment_ID group_ID user_ID comment_txt 任何人都可以build议重构这个旧的mySQL模式与Mongoose的最佳方式?

mongodb连接超时错误

我用mongodb数据库和node.js v12.0.10来连接和更新mongodb集合。 连接代码如下: async.parallel({ RE5: function (cb) { MongoClient.connect(config.riskEngineDB, function (err, r5DB) { cb(err, r5DB); }) }, MDB: function (cb) { MongoClient.connect(config.monitoringDB, function (err, mDB) { cb(err, mDB); }) } }, function (err, DBs) { assert.equal(null, err); console.log("Connected correctly to Dbs"); // ..doing updates.. }) 经过一段时间的运行,脚本打印出如下错误: { [MongoError: connection 39 to 127.0.0.1:27017 timed out] name: […]

最好的方式来构build我的mongoose模式:embedded式数组,填充,子文档?

这是我目前的模式 牌: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var BrandSchema = new mongoose.Schema({ name: { type: String, lowercase: true , unique: true, required: true }, photo: { type: String , trim: true}, email: { type: String , lowercase: true}, year: { type: Number}, timestamp: { type : Date, default: Date.now }, description: { […]

Node.js:多less个Redis客户端?

在Node.js中,最好是为每个HTTP请求或用户执行createClient(),还是最好对所有请求重复使用相同的客户端? 你是否还只有一个并行客户端的速度?

具有高读取性能的NoSQL数据库(写入访问不重要)?

我正在使用Nodejs在“实时”网站上工作 。 目前,我正在使用Redis,因为我需要高性能的读取权限。 写入访问对我的用例来说并不重要。 另外,Redis没有search的查询语言。 所以,我手动创build我的索引,并使用一些联合/交叉点/ …来查找一些值。 我认为使用embedded式查找系统和类似ORM的MongoDB会比较容易(例如Mongoose )。 问题是我不确定MongoDB是否是我的用例的最佳select。 你对NoSQL DB的build议是什么? Redis? CouchDB ? MongoDB? 卡桑德拉 ? 等等 我再说一遍:我希望读取访问和search (写入访问不重要),最简单的可能(orm-like?查找系统等) 谢谢。