Tag: mongodb

在MEAN堆栈中实现权限级别的最佳方式是什么?

我一直在关注“MEAN Machine”一书中的例子,并且实现了一个简单的基于令牌的authentication系统,使得某个模型的内容仅对经authentication的用户可用。 我想把这个更复杂一点:我需要三种不同的用户types。 我正在构build一个应用程序,让一些用户(比方说,供应商)可以上传某些只能被某些authentication用户(比如消费者)访问的数据,但是供应商也需要能够看到,但不能编辑上传的数据其他厂商。 然后,将会有第三种types的用户,即pipe理员,他将能够编辑和查看所有内容,包括其他较低级别用户的详细信息。 我应该如何着手build设呢? 在此先感谢您的帮助。

如何将mongoDB对象传递给Javascript / JS.Node中的所有原型函数?

我正在使用NodeJS和MongoDB一起,并将mongoDB对象传递给我所有的原型函数。 我不明白如何在这些原型之间传递这个对象。 也许有人能指出我正确的方向? 在我的主文件中,我创build了一个新的mongoDB对象实例,其中包含了我想用于使用mongoDB的所有原型。 然后我使用原型函数来连接并创build一个新的集合。 Main.js var mongo = require('./database/mongoDB') var mongoDB = new mongo(); // Connect to database mongoDB.ConnectDB(dbPath); // Create a collection mongoDB.CreateNewCollection("Usernames"); 原型函数在MongoDB.js中定义 MongoDB.js // Get mongoDB var mongoDB = require('mongodb').MongoClient; var DatabaseOperations = function () {}; // Constructor DatabaseOperations.prototype.ConnectDB = function(dbPath){ // Connect to database mongoDB.connect(dbPath, function(err, mongoDatabase) { if(!err) { […]

多列独特的mongoose节点的组合

目的 为两列创build唯一性 我试过了 这是我的模式, var mongoose = require('mongoose'); // location table Schema var locationSchema = new mongoose.Schema({ locationId: { type: String, required: true }, stockingLocationId: { type: String, required: true}, parentStockingLocationId: { type: String }, stockingLocationDescription: { type: String }, created: { type: Date, default: Date.now }, lastModified: { type: Date, default: Date.now }, isActive: […]

在post hook中间填充mongoose中的'find'

我有用户发布在我的网站上的文章的文章架构。 它引用了用户集合: var ArticleSchema = new Schema({ title: { // NO MARKDOWN FOR THIS, just straight up text for separating from content type: String, required: true }, author: { type: Schema.Types.ObjectId, ref: 'User' } }); 我想在所有find / findOne调用上有一个post钩子来填充引用: ArticleSchema.post('find', function (doc) { doc.populate('author'); }); 出于某种原因,在钩子中返回的文档没有填充方法。 我是否必须使用ArticleSchema对象而不是文档级别填充?

我如何创build一个有可选$ in和Mongoose的条件查询?

我正在尝试返回符合a或b或c条件的文档列表。 现在,我只能通过匹配所有条件,而不仅仅是一个工作来实现它的工作。 我试过这个: return User .find() .where({ $or: [ { $in: skillTags }, { $in: roleTags } ]}) 但是我得到一个错误。 这个工作,但不是我想要的,因为它只返回匹配skillTag和roleTag的结果。 我想要至less与其中一个或另一个匹配的文档: return User .find() .where({ skillTags: { $in: skillTags } }, { roleTags: { $in: roleTags } })

MongoDB:$和操作符不能使用Node.JS驱动程序进行批量更新

我正尝试在Node.js中使用MongoDB 3.0.4中的批量更新API 。 奇怪的是,如果使用$and $ne这样的运算符,我会得到下面的错误。 简单的查询虽然工作。 WriteError({"code":9,"index":0,"errmsg":"Unknown modifier: $and","op":{"q":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"u":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"multi":true,"upsert":false}}) 下面是CoffeeScript中的一些testing代码: bulk = db.mongo.collection('route-segments').initializeUnorderedBulkOp() filter = $and: [ { id: 49689 } { status: $ne: 4 } ] # filter = id: segStatus.id # <– this works bulk.find(filter).updateOne(filter, $set: status: 4) bulk.execute (err, result) -> console.log "err = #{err}" 我在Mongo shell中尝试了相同的命令,结果如下: > bulk=c.initializeUnorderedBulkOp() { "nInsertOps" : […]

mongodb和geoWithin

下面的search没有任何问题,但是当我改变searchtypes寻求一个多边形内的位置它是失去了,将不得不作出一些调整在search? 我做了一些尝试将发布在下面 db.geom.insert({"polygons": {"type":"Polygon", coordinates: [[[ 17.60083012593064, 78.18557739257812], [ 17.16834652544664, 78.19381713867188], [ 17.17490690610013, 78.739013671875], [ 17.613919673106714, 78.73489379882812], [ 17.60083012593064, 78.18557739257812] ]] } }); 我在mongo中使用的testing。 db.geom.find({polygons: { $geoWithin: { $geometry: { "type" : "Point", coordinates: [ 17.3734, 78.4738 ] } } } }); 道德是我有一个映射的家,想知道一个人什么时候进入那个家,我把这个人的位置每时每刻发送到服务器。 每一个时间(5秒)它运行一个testInsideOfHouse.js并检查这个人是否进入了房子,但脚本没有发现任何东西在mongo …有一些我可以做更多的“简单”的方式使用nodejs和蒙戈…或者我正确的方式吗? Position.find( { geo : { $geoWithin : { $box : […]

像mongoose文件的结构一样在树上recursion

我需要帮助从我的数据库通过get请求拉出对象的对象,所以我可以在我的网页上显示所有的对象,但是我运行的这个testing已经失败了,debugging它,它只是运行到永远,并且从不接收JSON。 我认为我的逻辑可能会被搞乱。 我不确定是否应该使用asynchronous,这看起来像callback地狱,现在想想我应该,但我不知道如果在优化思考如果这是一个体面的方式,我通常从最坏的情况下,我试图低于我的目标是围绕O(N),因为有N个文件,我只是遍历一个recursion树,还有一些额外的查询,以find最初的文件和什么不是这样,N + X(其中x是额外的查询量<N)。 但是我觉得我好像在思想上错过了一些东西,好像有更好的办法。 我有一个架构,像这样 Doc { title : string, author : string, subDoc : [{type: mongoose.Schema.Types.ObjectId, ref : 'Doc'}] } 所以有我生成的文件,每次我生成这些文件我有这些文件可以存在的子文档,甚至这些子文档可以有子文档。 然后我们结束了一些树状结构。 但是我不想显示文档>然后它的sub_doc1>所有的子目录…等>其子文档2>所有的子文档..>等等。 不过,我不知道我在想什么是有效的,甚至是值得做这么多的查询。 app.get('/docs/:doc/subDocTree', function(req, res) { var array = []; var id = req.params.doc; var num_proc = 0; console.log(id); Doc.findById(id, function(err, doc) { console.log(doc); for (var x = 0; x […]

我是否将唯一的项目存储为对象或数组?

我正在devise一个小型的网上商店应用程序,并使用MongoDB,我有一个应该包含项目的订单表。 每个项目都有一个唯一的属性code 。 我是否将项目作为对象存储在数据库中,这使得search非常简单: items[code] items : { "AR2" : { quantity : 50 }, "LS569" : { quantity : 30 }, } 还是将它作为数组存储(并使用循环search项目): items : [ { code : "AR2", quantity : 50 }, { code : "LS569", quantity : 30 } ] 哪一个更好,当从数据库中检索数据时,每种方法有哪些可能的缺点和优点?

达到收集结束时,可放大光标closures

我正在尝试从MongoDB上限集合中传输一些数据,如下所示: var query = {}; var options = {tailable: true, awaitdata: true, numberOfRetries: Number.MAX_VALUE}; var stream = myColl.find(query, options).stream(); stream.on('data', function(doc){ console.log(doc); }).on('error', function (error){ console.log(error); }).on('close', function () { console.log('closed'); }); 如预期的那样打印文档,但是在到达集合结束时,streamclosures。 是否有可能防止这种情况发生? 我希望程序打印数据到达集合中,无限期地等待集合的最后获取更多数据。