Articles of nosql

为摩卡testing设置数据库连接的最佳实践和最有效的方法

我有一套testing,我在我的代码上运行。 在testing运行之前,我想打开一个到testing数据库的数据库连接,并确保数据库是空的。 这个连接将保持对所有testing打开。 然后,当所有testing完成后,closures数据库连接并清空数据库。 我目前的解决scheme涉及打开每个文件的连接,这将导致大量的连接整体。 这将是理想的打开连接一次 – >运行testing – >清除数据库 – >closures连接一次。 这是我的一个摩卡testing文件的代码: import {assert} from 'chai'; import mongoose from 'mongoose'; import User from '../../../server/models/user.js'; import 'dotenv/config'; mongoose.connect(process.env.DB_TEST).then(db => { describe('User Model', function() { it('Save', function(done) { var john = new User({ name: { first: 'John', last: 'smith' }, email: 'john.smith@gmail.com', type: 'student' }); john.save(done); […]

当我尝试将对象推送到MongoDB和Nodejs中的数组时,为什么会出现castError?

我有一个mongoDB,我试图让一个Nodejs服务器来操纵数据库中的数据。 当我尝试将评论推送到BlogPost对象中的Comments数组时,我得到了一个castError。 下面的源代码,请告诉我,如果你错过了重要的信息。 提前致谢! 路线: routes.post('/comments/push/:id', function(req, res) { const blogPostId = req.param('id'); const commentProps = req.body; BlogPost.findById(blogPostId) .then((blogPost) => { blogPost.comments.push(commentProps); return blogPost.save(); }) .then((blogPost) => res.status(200).json({ 'status': 'Comment is deleted.', 'comment': blogPost })) .catch((error) => res.status(400).json(error)) }); BlogPost架构: const BlogPostSchema = new Schema({ content: { type: String, validate: { validator: (content) => content.length […]

除了在MongoDB中为Blog-Tag系统嵌套标签数组之外,还有什么其他方法吗?

我正在尝试为node.js / express / mongodb编写一个自己的博客引擎(也是开始学习node.js)。 为了进一步比在互联网上的教程,我想添加标签的支持博客引擎。 我想用标签做以下事情: 观众可以将所有的标签看作“标签云页面”上的标签云, 观众可以在文章列表页面和单个文章页面上看到文章所具有的标签 观众可以点击一个标签来显示文章列表 更重要的是,观众能够以SO方式search具有特定标签的文章:[tag1] [tag2] – > / tags / tag1 + tag2 – >具有tag1和tag2的文章列表 在关系数据库中,post_tag表将用于此。 但是如何在MongoDB中devise这个呢? 我检查了MongoDBdevise – 标签 但正如efdee的评论,devise db.movies.insert({ name: "The Godfather", director: "Francis Ford Coppola", tags: [ "mafia", "wedding", "violence" ] }) 有一个问题: 这似乎并没有真正回答他的问题。 你将如何获得在整个电影集合中使用的不同的标签清单? 这也是我的担心:在我的devise中,我需要显示所有标签的列表; 我也需要知道每个标签有多less文章。 那么是否有比上面所示的devise更好的方法? 我对上述devise的关注是:如果我想显示标签列表,查询将遍历数据库中的所有项目。 有没有更有效的方法?

MongoDB上的单个查询或多个查询mongoskin?

这是在MongoDB上 {cod_com:'WWWOAN', cod_prod[{prod:'proda',info:'hola mundo'},{prod:'pacda',info:'hola mundo'},{prod:'prcdb',info:'hola mundo'}] } {cod_com:'WWWOA2', cod_prod[{prod:'prdda',info:'hola mundo'},{ccod:'prcda',info:'hola mundo'}] } {cod_com:'WWWOA1', cod_prod[{prod:'prcda',info:'hola mundo'},{aaad:'prcda',info:'hola mundo'}] } 我必须得到cod_prodvariables中的信息…所以即时通讯工作与两个步骤 首先我查询cod_prod的所有者 db.collection.findOne({cod_com:'WWWOA1'}); 如果存在,我查询我需要的cod_prod db.collection.findOne({'cod_prod.prod':'prcda'}); 所以基本上两次查询,第一是对产品的所有者,第二是即时search产品的信息… 问题是,有什么方法直接search产品? 我不能使用这个… db.collection.findOne({'cod_prod.prod':'prcda'}); 因为不同的业主有同样的产品…所以首先我得到业主,第二我得到的产品…. 任何人有更好的方法? 或不同的方式来获取信息? TNX

完整的Node.js网站的成分

我已经做了很多Node.js的研究几个星期。 我可以看到Node.js是非常强大的,但我有一些缺失的想法,使一个完整的function网站。 我知道的: Node.js有很好的框架,比如Express,Sails,Meteor,Compound,Tower等。 Nosql数据库更适合Node。 我发现MongoDB和模块mongoose等等。 我错过了,问: Node.js框架有像Handlebars,ejs等模板引擎。如果我是正确的,你可以传递这样的数据…但是这足够吗? 我真的不明白Node.js网站的前端部分。 可以说我正在用mongodb数据库使用express。 我需要在前端的JavaScript MVC框架? 如果我不是什么应用程序框架? 有人可以解释一个完整的Node.js网站的成分与一个什么使用,在哪里使用列表? 谢谢!

MongoDB元素的顺序

我的应用程序有一个游戏列表。 每个游戏都有一个位置(向用户显示的顺序是:1,2,3 …)。 我正在使用MongoDB来保存所有的数据。 好的,所以现在我有了位置4的游戏。 我想把它改成位置1.那么我需要做什么? 我需要在MongoDB中将这个游戏的场地位置从4更新为1,并且对位于1之后的这个集合中的所有文档进行增量。 但是我觉得这不是个好主意! 可能你有想法如何更好地实施它? 谢谢! 蒙戈表的例子: _id | name | description | position | ________________________________________________________ ObjectId("…") | bubble | some description | 1 ObjectId("…") | bubbleA | some description | 2 ObjectId("…") | bubbleB | some description | 3 ObjectId("…") | bubbleC | some description | 4 ObjectId("…") | bubbleD […]

使用Redis进行用户查找表

我正在学习Redis,我正在使用一个简单的users表。 我正在通过node_redis与Redis进行node_redis 。 我存储每个新用户,如: client = redis.createClient(); client.incr('user_count', function (err, reply) { var new_user_id = reply; client.lpush('user_ids', new_user_id); client.hset('user:' + new_user_id, 'username', req.param('username'), redis.print); client.quit(); res.redirect('/'); }); 所以在这一点上,我希望我的数据库看起来像这样: user_ids 1 2 和 user:1 username 'Guy One' user:2 username 'Guy Two' 这工作正常。 但是我现在坚持的是生成完整的用户表。 我迭代user_ids ,并为每一个,拉出相应的user哈希条目。 除了看起来非常低效(每个用户密钥的单独查询)之外,这种方法也是有问题的,因为node_redis getter调用是asynchronous执行的。 所以每个getter都必须在成功callback中调用下一个getter,等等。一个非常长的嵌套callbackgetter的链。 这是我最初尝试的: var usernamesList = new Array(); client.lrange('user_ids', 0, […]

Mongoose查询子文档

我有以下计划; 它的一个会话scheme,作为子文档结构的用户名和启用或禁用状态; conversation = {title: "title", users: [{"name: "a", "enabled": true}, {"name: "b", "enabled": false}]} 我想要select启用状态设置为true的所有用户。 我发现在投影$ elemMatch只是这样做,但只返回第一个元素…把$ elemMatch在查询部分不会做任何事情… 任何帮助表示赞赏

MongoDB:2个集合的primefaces调用(find + insert)

我怎么能自动获得最新的“回合”loggingObjectId并使用它插入到“存款”集合? 这个post的回答说不能这样做: 有没有办法自动更新MongoDB中的两个集合? 这是真的吗? 在过程A中,我想自动查找最新的一轮id(rid)并将其插入到存款中。 比赛的条件是,在A发现之后,另一个B可能会插入一轮,所以现在A有一个不是最新的,但是落后的1。 A怎么能轮streamfind摆脱这个摆脱存款(作用于这两个集合)primefaces? // GET ROUND ID (RID) OF LATEST var rid; db.rounds.find().limit(1).sort({$natural:-1}, function(err, latestInsertedRound){ rid = latestInsertedRound[0]._id; print(rid, 'rid'); // if another process B inserts now, this rid is 1 behind // INSERT INTO DEPOSITS db.deposits.insert({uid:uid, iid:iid, rid:rid}, function(err, insertedDeposit){ print(insertedDeposit, 'insertedDeposit'); }); });

是否有必要closuresnodejs中的mongodb连接?

我是新的nodejs和mongodb。 在MongoDB本地驱动程序网站,他们在每个请求后closures连接,但似乎是在高stream量网站非常缓慢和问题。 我只是很想知道是否有必要这样做,或者我可以声明一个全局variables,并像这样的DB引用: var mongodbClient = require('mongodb').MongoClient; var db; function connect() { mongodbClient.connect('connection string', function (err, mdb) { db = mdb; }); } connect(); function insert(query, collection, fn) { db.collection(collection) .insert(query, function (er, da) { fn(er, da); }); } function find(query, collection, fn) { db.collection(collection) .find(query).toArray(function (er, da) { fn(er, da); }); } 我不想用mongoose,更喜欢学习和理解发生了什么。