Tag: mongodb

使用Mongoose更新Node.js中由find()方法返回的结果

我是Node.js的新手。 我的Node.js应用程序有一个名为Selfie的模型。 # model/selfie.js var mongoose = require('mongoose'), Schema = mongoose.Schema, selfieSchema = new Schema({ path: { type: String }, caption: { type: String }, sent_mod: { type: Number, default: -1 }, // -1 not sent, 0 sent, 1 accepted display_count: { type: Number, default: -1 }, // -1 not sent, 0 sent, 1 displayed […]

Mongodb如何查询特定文档的数组子集

我想运行一个查询来select特定的文件。 然后在每个文档上打开一个子文档数组并运行一个查询来过滤这些子文档。 例: { "_id" : ObjectID(23412351346435), "list" : [ {date: ISODate(2015-01-12T00:00:00.000Z), name: "Jan 12"}, {date: ISODate(2015-01-13T00:00:00.000Z), name: "Jan 13"}, {date: ISODate(2015-01-14T00:00:00.000Z), name: "Jan 14"} ] } 我猜测我可以用Mongo的aggregate函数做一些事情。 我已经能够匹配我想要的文件,但我怎么能得到一个子查询进入arrays? 我尝试使用$elemMatch但只返回匹配date范围的数组中的第一个项目。 当我查询ObjectID(23412351346435)和date范围2015-01-12到2015-01-13要清楚我希望它返回这个; { "_id" : ObjectID(23412351346435), "list" : [ {date: ISODate(2015-01-12T00:00:00.000Z), name: "Jan 12"}, {date: ISODate(2015-01-13T00:00:00.000Z), name: "Jan 13"} ] }

如何dynamic地在MongoDB上创build子文档

我有一个集合的MongoDB数据库如下: var mongoose = require('mongoose'); var journalSchema = mongoose.Schema({ title : String, journalid: {type:String, index: { unique: true, dropDups: true }}, articleCount : type:Number, default:1, }); module.exports = mongoose.model('Journal', journalSchema); 现在我的数据库正在增长,我希望每年都有一个“文章数量”字段。 我可以按照以下years : [{articleCount : Number}]创build一个数组years : [{articleCount : Number}]并通过访问journal.years[X]来填充特定年份,其中X对应于1997年的0,1998年的1年等。 但是,我的数据dynamic报废,我想我的快递服务器中的一个functionarticleCount增加基于年份。 例如: function updateYear(journalid, year, callback) { Journal.findOneAndUpdate( {'journalid':journalid}, {$inc : {'articleCount' : 1}}, // […]

我如何使用mongoose/ mongodb在单个查询中应用$ match,$ group和$ sum

我正在尝试用我对MongoDB的基本知识来find解决scheme。 我有像下面的数据 { _id: 45556, "name": "John", "gender": "male", "lunch_preference":[ {"outlet":"KFC", "day":"monday", "spent":300}, {"outlet":"Mc", "day":"friday", "spent":250}, {"outlet":"dominos", "day":"sunday", "spent":400} ] } { _id: ab123, "name": "Peter", "gender": "male", "lunch_preference":[ {"outlet":"dominos", "day":"tuesday", "spent":150}, { "outlet":"Mc", "day":"wednesday", "spent":350}, {"outlet":"dominos", "day":"sunday", "spent":300} ] } 在这里,我正在过滤数据使用$match我的查询过滤: db.lunch.aggregate([{"$unwind":"$lunch_preference"}, {$match: {"lunch_preference.outlet": "dominos"}},{$match: {"lunch_preference.day": "sunday"}}]) 这个查询工作正常! 现在我想计算(花费的总和)上述过滤数据的花费,所以我申请如下。 db.lunch.aggregate([{"$unwind":"$lunch_preference"}, {$match: {"lunch_preference.outlet": "dominos"}}, {$match: […]

MongoDB游标在ejs模板中是空的(asynchronous调用内部ejs)

以下路由器调用ejs模板来将光标值填充到html页面中。 router.get('/users_loaded_disconnect', function(req, res) { res.render('users_loaded_disconnect', {cursor: req.db.collection('notify_user_state_collection').find({})}); }); user_loaded_disconnect.ejs <!DOCTYPE html> <html> <head> </head> <body> <b> Users Loaded Disconnect </b> <ul> <% cursor.nextObject(function(err, item) { %> <%= JSON.stringify(item) %> <% }); %> </ul> </body> </html> 光标不起作用。 但是,如果光标在路由器内迭代,则会显示该值 req.db.collection('notify_user_state_collection').find({}).nextObject(function(err, item) { console.log(JSON.stringify(item)); }); 迭代ejs模板中的游标有什么错误?

摩卡testing花费太长的时间来执行

所以我正在一个express.js应用程序,我有一个mongoose模型用户。 我写了一个testing文件(使用Mocha)来testingsave()函数,但是我所有的testing都花费很长时间来执行并最终超时。 这是我得到的错误: Testing – Server – User – Model Testing save() 1) should be able to save without problems 2) should fail to save an exisitng user again 3) should should an error when try to save with empty email 4) should give an error when try to save with empty password 5) "after […]

洞悉两个REST APIdevise的可行性

过去我已经开发了几个REST API,目前正在为我们公司内部的软件解决scheme构build一个新的REST API。 我select了MEAN堆栈来构build这个和Mongoose来pipe理模式devise和数据层validation。 良好的devise,耐用性和可扩展性是我的榜单之首。 API将被我们内部的Angular应用程序,Android应用程序所使用,谁知道还有什么,有一天我们的PHP网站可能会使用API​​,或者将来我们可能会为其他业务提供平台。 我目前正在称重两种devise: 通用目的 :根据身份validation提供对除API的受限制CRUD访问权以外的所有访问权限,为复杂请求提供自定义端点。 有点像Parse 。 限制 :曾经使用过这个。 API消费者提出了一个需求,然后由服务器以端点的forms完成。 通用devise API消费者可以灵活地根据前端需求来制作查询,而非常复杂的编译则被转移到自定义的端点上。 全局限制(例如:最多可以返回100条logging),每个经过身份validation的系统用户types可以是限制性模式和logging级访问。 'use strict'; module.exports = function (app) { // Api routing var api = require('../controllers/api.controller.js'); /** * Cental API router */ app.route('/api/create') .post(api.create); app.route('/api/read') .get(api.read); app.route('/api/update') .put(api.update); app.route('/api/remove') .delete(api.remove); app.route('/api/dashboard/:country/:date') //Complex endpoint .get(api.dashboard); }; 创build调用的示例响应: { "response":[ { "_id":"54f703531c3757fe23923250", […]

在具有多个连接的数据库中快速分配游戏pipe理

我想运行一个可以快速分配游戏数据的服务器。 简单的模型是: P1 joins P2 joins Make a game with P1 & P2 P3 joins P4 joins Make a game with P3 & P4 etc.. 但先进的devise是要有配对的逻辑。 例如: P1 (A) joins. P2 (B) joins. P3 (C) joins. P4 (A) joins. Make game with P1 & P4 etc.. 到目前为止,我一直在使用Node + Mongo.js,但是读取和写入数据库似乎很奇怪。 这是通过使用内存结构更好的服务吗? 我应该看看Redis吗? 我在这里寻找效率。 它不一定是为了数十亿的关系,而是应该容忍的说,即世界上的象棋人群正在玩与国际象棋类似的ELO排名相匹配的国际象棋游戏。

连接到MMS副本集时发生Mongo身份validation错误

我使用MongoDBpipe理服务(MMS)在服务器上部署和pipe理我的MongoDB实例,并部署了一个副本集。 我还确认我在“授权和用户”选项卡中添加了具有所需权限的用户,如下图所示。 当我login到我的服务器并运行命令来检查用户是否已被添加它显示它们已被authentication,因为它返回1。 $ use admin $ db.auth('mbdb', 'xxxx') $ 1 我有一个使用mongoose连接到mongodb的节点应用程序,这是我用来连接的url格式: 'url' : 'mongodb://mbdb:xxxx@localhost:27000/dbprod?replicaSet=ProdSet' 我遇到的问题是,当我启动节点应用程序,我得到这个错误: > mobile-bulletin-node@0.0.1 start /var/TeamCity/buildAgent/work/d81f9c89b9a85a90 > node ./bin/www { [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } js-bson: Failed to load c++ bson extension, using pure JS version /var/TeamCity/buildAgent/work/d81f9c89b9a85a90/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:246 throw message; ^ MongoError: auth failed at Object.toError (/var/TeamCity/buildAgent/work/d81f9c89b9a85a90/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js:114:11) at /var/TeamCity/buildAgent/work/d81f9c89b9a85a90/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1156:31 […]

使用坐标geojson保存时间戳

我使用GeoJson来保存一些timeStamp到Mongoose数据库的坐标,我这样定义模型: var positionSchema = mongoose.Schema({ position: [{ properties: { timeStamp: Date }, geometry: { type: { type: String, default: 'Point' }, coordinates: { type: [Number] } } }] }); 数据从API发送如下: position.findByIdAndUpdate(values.geometries, { $push: { position: { properties: request.payload.timeStamp, geometry: lastLocation } } } lastLocation是: lastLocation = { type: 'Point', coordinates: [ request.payload.position.longitude, request.payload.position.latitude ] }; […]