Tag: mongodb

Mongoclient:如何设置embedded式文档的值

我在nodejs中使用MongoClient。 我想更新一个特定的embedded式文档值,但我不知道该怎么做。 在mongo shell中,它像{$set{doc.doc : "test"}} 但是,当我试图在节点中以完全相同的方式使用它时,它给了我一个错误,即点不能被忽略。 我试过它作为一个string,这也不工作。 有人得到这个问题的解决scheme吗? 编辑:在Mongodb的Json文档: { name : test, doc : {}, } 我想将以下键值对添加到“文档”文档test:test 相关的代码部分(我怎么想它应该工作) db.collection("test").update({name:test},{$set:{doc.test:test}}, callback)

当modelObject从数据库本身获得时,modelObject.save()是否只更新现有的数据库文档?

要使用演示该问题的示例,假定我有一个由以下模式定义的用户模型: var UserSchema = new Schema({ username: String, email: String } mongoose.model('User', UserSchema); 我知道要使用save方法更新用户,我可以查询用户,然后保存更改,如下所示: User.findOne({username: usernameTofind}, function(err, user) { //ignore errors for brevity user.email = newEmail; user.save(function(err) { console.log('User email updated') }); }); 但是,如果我尝试创build一个新的用户对象与完全相同的字段值(包括_id)是否有覆盖数据库文件的任何可能性? 我不会假设,因为从理论上讲,这意味着恶意用户可能利用不安全的API并覆盖现有文档(例如使用“创build新帐户”请求,这将不会/不能依赖于用户被authentication),但更重要的是,当我尝试使用请求工具(我使用邮差,但我敢肯定类似的curl命令就足够了)这样做,我得到一个重复的_id错误 MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index 所以我只想澄清,更新现有文档的唯一方法是查询文档,修改返回的实例,然后调用该实例的save方法,或者使用静态update()。 这两者都可以通过要求authentication来保护。 如果有帮助,我上面提到了这个问题的动机,因为我想确保用户不能覆盖现有文档,如果公开暴露以下方法: userCtrl.create = function(req, res, next) […]

Mongoose查询子文档

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

按最新的时间戳聚合mongodb

我想使用聚合函数得到每个城市上次时间戳的“人口”。 在这样的MongoDB中: { "_id": {"$oid": "55354bc97b5dfd021f2be661"}, "timestamp": {"$date": "2015-04-20T18:56:09.000Z"}, "city": "Roma", "population": [ {"age": 90,"count": 1000}, {"age": 25,"count": 25} ] }, { "_id": {"$oid": "55354c357b5dfd021f2be663"}, "timestamp": {"$date": "2015-04-20T18:57:57.000Z"}, "city": "Madrid", "population": [ {"age": 90,"count": 10}, {"age": 75,"count": 2343}, {"age": 50,"count": 500}, {"age": 70,"count": 5000} ] }, { "_id": {"$oid": "55362da541c37aef07d4ea9a"}, "timestamp": {"$date": "2015-04-21T10:59:49.000Z"}, "city": "Roma", […]

使用嵌套模式保存并查找带有参考和承诺的Mongoose文档

我有一个相当简单的问题。 我试图保存一个文档,其模式包括一个嵌套模式引用,该模式引用包括另一个模式引用。 但是,当我去检索该文档时,它不包含(必填)嵌套字段,除非将其填充到相同的查询中。 即使填充查询,但是,第二个嵌套的文档不填充。 我在这里误解了mongoose的工作方式吗? 下面的JavaScript和LiveScript示例代码和输出。 JavaScript的: (function(){ var mongoose, bookSchemaObj, authorSchemaObj, agentSchemaObj, bookSchema, authorSchema, agentSchema, Book, Author, Agent, testBookObj, testAuthorObj, testAgentObj, testAgent, testAuthor, testBook; mongoose = require("mongoose-bird")(require("mongoose")); mongoose.connect("mongodb://test:test@localhost:27017/test"); bookSchemaObj = { author: { type: mongoose.Schema.Types.ObjectId, ref: "Author", required: true }, pubYear: { type: Number } }; authorSchemaObj = { name: { type: String, required: […]

平均堆栈:如何绑定上传到mongoose模型?

我在我的MEAN应用程序(它的一个项目控制面板)中玩上传表单。 我使用这个教程来实现一个工作上传: http : //markdawson.tumblr.com/post/18359176420/asynchronous-file-uploading-using-express-and 有了这个我可以上传文件 – 他们出现在我的上传文件夹。 现在我想实现,上传链接到用户所做的项目。 例如:Jon Doe已经login,他上传了一张照片。 现在我想呈现他的个人资料页面。 我查询了我的项目模型Jon Doe – >现在我想要他上传的媒体文件。 那么,我怎么把我的媒体发布到Jon Doe的projectSchema ? 之后,在Angular中展示所有媒体的最佳方式是什么? – – – 编辑 – – – 我一直试着用扩展器,我几乎设法使GET和POST的上传工作。 问题是,我不能从数据库中获取任何数据。 我的控制台给了我一个GET /uploads/media/[object%20Object] 304 。 目标是:编写project_id ,将文件写入mediaSchema。 所以当我打开一个项目时,我会得到所有与本项目的project_id匹配的媒体。 我更新了我的代码: HTML表单 <form id="uploadForm" enctype="multipart/form-data" action="/uploads/" method="post"> <label for="project_id">Ihre Projekt ID</label> <input type="text" name="project_id" value="{{projects._id}}" readonly> <input type="file" name="userPhoto"/> […]

Get Object没有方法'executeDbCommand'

我在nodejs中使用mongoose 4.0来使用mongodb 3.0.2 当我将mongoose 2.3升级到4.0时,它开始为“executeDbCommand”抛出错误,看起来这是在mongoose 4.0中不推荐使用的,任何人都有更换这个命令的想法吗? 我试图挖掘mongoose,但无法find它,请帮助我,如果有人知道!

创build用户时,sailsJS中的id:null问题

我怀疑我的问题是愚蠢的,但我找不到错误。 我正在使用mongodb来保存用户数据。 似乎每一个工作正常,但是当我看数据库我有每个用户loggingid: null 。 我不想要那个id: null ,我已经有了_id字段。 $sails –version 0.11.0 我的userController: module.exports = { create: function(req, res) { User.create(req.params.all(), function userCreated(err, user) { if(err) res.json(401, err); res.json(200, user); }) } } 我的用户模式: module.exports = { attributes: { name: { type: 'string', required: true }, email: { type: 'string', email: true, required: true, unique: true […]

POST和GET图像到/从Angular的MongoDB

我正在做一个angular度的应用程序,为用户提供了可能性,来pipe理他们的项目。 我有nodeJS&express expresside和MongoDB作为我的数据库。 我想实现的目的是,用户可以上传媒体(16MB以下的图片,所以不需要使用GridFS)到他们的项目中,并且可以显示哪个项目,哪个媒体附加。 我没有得到图像,也没有错误。 我如何从angular度传递project_Id到我的路线,find附加到项目的媒体? 这样试图发布和获得媒体正确的方式? 项目和媒体的模型: var mediaSchema = mongoose.Schema({ media : {data: Buffer, contentType: String}, project_id : String, updated_at : {type: Date, default: Date.now } }); var projectSchema = mongoose.Schema({ author : String, name : String, description : String, tags : String, updated_at : {type: Date, default: Date.now }, active : {type: […]

使用多个模型作为单个控制器MEAN.IO

当谈到平均值时,我是一个新手。 我生成了一个包ModelA。 我也生成了ModelB。 我现在尝试在ModelA控制器中引用2个模型。 例如 型号/ ModelA.js var ModelA = new Schema({ name: String }); mongoose.model('ModelA', ModelA); 型号/ ModelB.js var ModelB = new Schema({ name: String }); mongoose.model('ModelB', ModelB); 包/位指示/ ModelA.js var mongoose = require('mongoose'), ModelA = mongoose.model('ModelA'), ModelB = mongoose.model('ModelB'), _ = require('lodash'); 我一直得到MissingSchemaError:架构尚未注册模型'ModelB'。 我想我的问题是如何在控制器/ ModelA中引用modelB?