Articles of mongodb

通过单个呼叫更改多个文档中的字段

我有一个使用mongo的节点/快速应用程序。 我有一个名为“paymentMethods”的集合,用于存储包含以下内容的文档: { owner_id, name_on_card, card_number_last_4, isActive } 一个所有者可以在这个集合中有多张卡片。 当我添加一张新卡片时,我会使“isActive”成为如下所示: router.route('/') .post(function( req, res ){ PaymentMethod.findAndUpdate({owner_id:req.body.ownerId}) var paymentMethod = new PaymentMethod(); paymentMethod.owner_id = req.body.ownerId; paymentMethod.card_number = req.body.cardNumber; paymentMethod.name_on_card = req.body.nameOnCard; paymentMethod.exp_date = req.body.expDate; paymentMethod.cvv = req.body.cvv; paymentMethod.zipcode = req.body.zipCode; paymentMethod.active = true; console.log('Payment information passed: ', paymentMethod); paymentMethod.save(function(err, paymentMethod){ if(err) res.send(err); res.json(paymentMethod); }) }); 我想弄清楚的是,我可以在同一个调用中更新所有其他匹配logging,并将它们的“isActive”字段设置为null或false。 […]

如何在节点中使用mongoose进行统计

从mongodb中的文档中获取统计信息的最佳方式是什么:问题如下:用户按月份/季度创build了多less个post(mongo中的文档)? 或者在这个用户发布的类别? 如果一个职位在一个数组中有多个类别,那么你会如何优雅地计数呢? 总和/ mean / sd有快捷方式吗? 什么是处理这种types的数据的最好方法是什么样的数据库包,像pandas在python oder R像节点中的数据框?

无法使用findById传递查询结果

我正在使用节点和mongoose的博客上工作。 在索引页面我能够显示所有的post,但点击标题看到完整的后null值显示。 href链接已被正确插入,并redirect到所需的链接“ http:// localhost:3000 / posts / show / 596e795be0a91a1cdcc572eb ”。 我试着通过ID传递查询。 posts.js – >路由 var posts = require('../models/posts'); router.get('/show/:id', function(req, res, next) { console.log(req.params.id); posts.findById(req.params.id, function(err, post){ console.log(post); res.render('show',{ "post": post }); }); }); posts.js->模型 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var lists = new Schema({ title:{ type: String, required: true […]

MongoDB-mongoose不响应REST API

我对MongoDB-mongoose有一个奇怪的问题,它不响应REST API mongoose版本 – 4.11.3 Mongo DB shell版本3.4.6我的电脑上的所有东西都是本地的 连接到Mongo DB如下: server.js var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log("Connected correctly to db"); }); … var app = express(); var tasks = require('./server/routes/taskRouter'); app.use('/api/tasks',tasks); 日志“正确连接到数据库”被打印。 架构(tasks.js) var mongoose = require('mongoose'); var Schema = mongoose.Schema; var taskSchema = […]

如何从一个控制器访问同一个职位?

我是全栈networking开发的新手。 现在我遇到了一个问题。 我使用的是mongodb,mongoose,node和express。 我有两个控制器,一个是注册,另一个是configuration文件。 代码注册将是这样的 router.post('/',(req,res,next)=>{ let user = new userProfile(); user.email = req.body.email; user.name = req.body.firstName; user.save((err)=>{ if(err){ return err; } }) res.redirect('/profile'); }); 点击提交后,我可以在集合中find用户条目。 现在我在configuration文件控制器。 configuration文件的代码: router.get('/',(req,res)=>{ console.log(req.body.email); userProfile.find({email: 'yyyy'},(err,user)=>{ if(err) return err; }) res.render('profile/profile'); }) 当我做的console.log,它输出未定义。 预期的输出应该是注册页面的电子邮件地址,这样当我findfunction的时候,我将会得到正确的具有相同电子邮件地址的条目,并在网页上显示相应的用户名。 我的问题是configuration文件控制器如何从注册控制器访问相同的post信息。

聚合对象数组中的数据

我有以下架构: { "_id": { "$oid": "58c0204d9f10810115f13e5d" },"OrgName": "A", "modules": [ { "name": "test", "fullName": "john smith", "_id": { "$oid": "58c0204d9f10810115f13e5e" }, "TimeSavedPlanning": 520, "TimeSavedWorking": 1000, "costSaved": 0 }, { "name": "test1", "fullName": "john smith", "_id": { "$oid": "58c020f85437c22215be92cc" }, "TimeSavedPlanning": 0, "TimeSavedWorking": 1000, "costSaved": 500 } ] } 我想聚合在“模块”数组内的所有文档,其中OrgName = A并输出以下总计。 TimeSavedPlanning = 520 (because […]

如何从Ticketmaster的开放API获取所有事件数据?

我正在尝试从Ticketmaster的API获取所有事件信息,并将特定的variables添加到mongoDB中。 不过,我目前使用的APIs仅限于每页200个事件。 因此,我不可能将活动信息与场地信息联系起来,因为这些信息被单独添加到mongoDB中。 一种解决scheme可能是通过更改API-url中的页面参数来遍历所有页面,或者也可能有其他选项? 我的代码看起来像这样(抱歉的长度..): app.get('/tm', (req, res) => { axios // getting venues .get('https://app.ticketmaster.com/discovery/v2/venues.json?apikey=myApiKey&page=0&size=200&countryCode=DK') .then(response => { const venuesToBeInserted = response.data._embedded.venues.map(venue => { // preparing venues return { sourceID: venue.id, venue: venue.name, postalCode: venue.postalCode, city: venue.city.name, country: venue.country.name, countryCode: venue.country.countryCode, address: !!venue.address ? venue.address.line1 : null, longitude: !!venue.location ? venue.location.longitude : null, latitude: !!venue.location […]

随机testing与Mongo错误

我试图找出为什么我得到随机错误与下面的代码 const Mongo = require('mongodb') it.only('x', async () => { let db const url = `mongodb://test.localhost:27017/nako`; db = await Mongo.connect(url) await db.dropDatabase() db = await Mongo.connect(url) let collection = await db.createCollection('accounts') await collection.createIndex( { login : 1}, {unique: true }) await collection.insert({name: 'yo', login: 'one'}) }) 虽然我完全摧毁了数据库并重新构build,但我得到了两个随机错误: 集合已经存在 重复键错误收集(login时) 我在哪个部分不等待指令结束? 还是我使用任何types的陈旧价值?

Mongodb或mongoose性能问题

我开发了一个用nodeJs / mongodb备份的应用程序,而前端是Angularjs 1.6.5。 应用程序用于提供实时分析,数据每增加一个分钟,数据量就会增加。 随着数据库大小的增加,查询需要花费更长的时间来执行,甚至有时会失败并给出404错误。 (Nginx的服务器)但奇怪的是,每当我运行相同的查询在mongo shell中的.explain('executionStats')方法的服务器,它给予即时响应与执行时间0毫秒。 因此,根据上面的截图,10数据mongo shell的限制,没有时间执行它,但在浏览器中,当我通过节点和mongoose敲db时花了1分钟,但不可能返回结果(也许nginx返回404之后时间) 但是我尝试在mongo shell之后没有设置任何限制,也就是在less于4秒的时间内用6331522logging返回数据。 我不知道究竟是什么问题。 任何帮助将appriciated

根据查询参数过滤mongodblogging

我在Express.js中编写一个REST API来从mongo数据库中检索一些logging。 为了获得一组logging,我使用了一个标准的GET请求: GET localhost:3000/api/books 现在要实现filter,我使用了express-api-queryhandler 。 代码如下所示: routes.use(queryHandler.filter()); […] .get((req: any, res: Response) => { Book.find(req.where, req.fields, req.options, (err: any, orders: any) => { res.status(200).json(books); }); }); 所以现在当我想要检索一个特定的元素,我可以写如: GET localhost:3000/api/books?name=Harry%20Potter 但是,实施(高于/低于)GT,GTE,LT,LTEfunction的最佳方式是什么? Node.js有没有好的库? 我只在Loopback文档中find了where函数,但是可以使用Loopback和Express吗? 我可以手动编写所有东西,但这不是一个好的解决scheme。 提前致谢。 编辑:我编辑了前面提到的包中的filter.js文件,以便它可以与gt,lt,gte,lte一起使用。 它看起来很安全,但也许有更多的validation更好的select? function filter (query, skip) { var filters = {}; var k; var SKIP_KEYS = [ 'fields', 'limit', […]