Tag: mongoose

mongoose保存callback不起作用

我正在构build一个简单的Web应用程序的服务器,它使用MongoDB后端来存储数据。 我实例化一个新的mongoose连接使用: mongoose.connect('mongodb://localhost:27017/callback-newsfeed-db') 我的MongoDB输出似乎很好: 2017-12-02T21:00:53.277-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52027 #86 (1 connection now open) 2017-12-02T21:00:53.291-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52028 #87 (2 connections now open) 2017-12-02T21:00:53.291-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52029 #88 (3 connections now open) 2017-12-02T21:00:53.292-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52030 #89 (4 connections now […]

按标题searchMongoDB不是id

我试图让我的路线从博客应用程序的URL拉标题。 我得到它的工作使用id但无法弄清楚标题。 我知道我不能做findById() ,而是使用find() 。 我如何定制我的查询来查找标题。 路线 app.get("/blogs/:title", function(req, res) { Blog.find(req.params.title, function(err, foundBlog){ if(err){ res.redirect("/blogs"); } else { res.render("show", {blog: foundBlog}); } }); }); 模式 var blogSchema = new mongoose.Schema({ title: String, image: String, body: String, created: {type: Date, default: Date.now}, author: { id: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, email: String } });

Mongoose模式模式引用不工作

基本上我有3个mongoose模型(用户,产品,购物车)。我已经尝试用用户模型引用购物车模型。我用mongoose中的填充方法来填充模型中的引用属性。但它不工作,在安装后将产品添加到购物车之后获得一个空的购物车arrays。 { "_id": "5a0b2dcf726753258002273d", "password": "12345", "securityQuestion": "What is your Nick Name?", "securityAnswer": "rj1", "__v": 0, "cart": [], // empty cart here "mobileNumber": 1234567890, "email": "rahul@gmail.com", "lastName": "jhawar", "firstName": "rahul", "userName": "rj" } 我也想知道我的模型引用是否正确(我的意思是关系)。 我对这个概念很陌生,请帮助我。 //Cart.js var mongoose = require('mongoose'); var Schema = mongoose.Schema; var cartSchema = new Schema({ productName : {type:String,default:''}, productCategory : {type:String,default:''}, […]

使用mongoose更新深度嵌套的子文档

我试图阅读大部分类似的问题(而且有很多),但找不到任何我能理解的解决scheme。 如下所述的文件结构 – [ {RoomID:Room1, Boards:[ {BoardID:Board1, Devices:[ {DeviceID:Dev1} ….] } ….] } …..] 查询RoomID和BoardID后如何添加新设备?

mongoose自定义validationfunction与竞争条件

我们有一个日历API,用于在一天内预订一个插槽 SlotShcema startDateTime:Date // showing the day and the starting hour duration:number // showing the slot duration 我们可以计算出槽的结束 endDateTime = startDateTime + duration 我们要添加一个validation,所以没有两个槽相交,只有一个用户可以预订它。 我发现服装asynchronous自定义validation器 ,但我们无法find我们的场景任何文档。 问题是想方设法解决两个并发保存可能节省冲突预订“交易”的竞争条件。 在开始创build插槽之前,我做了自己的validationfunction,但是如果有竞争条件,它可能同时保存两个插槽,这是错误的。 有什么方法可以解决比赛条件? 问题在GitHub https://github.com/Automattic/mongoose/issues/5876

mongoose虚拟填充和聚合

我正在尝试使用更新的虚拟填充function(使用Mongoose 4.13,Mongo 3.6)的Mongoose模式进行聚合。 可以说,我有以下(为了说明目的简化)模式: const ProjectSchema = new mongoose.Schema({ projectId: Number, description: String }); ProjectSchema.virtual('tasks', { ref: 'Task', localField: 'projectId', foreignField: 'projectId' justOne: false ]); const TaskSchema = new mongoose.Schema({ taskId: Number, projectId: Number hours: Number }); const Project = mongoose.model('Project', ProjectSchema); const Task = mongoose.model('Task', TaskSchema); 查询项目和填充相关的任务是正常使用.populate()如: Project.find({projectId: <id>}).populate('tasks'); 但是现在我想总结一下按项目完成任务的时间(把$ sum部分留在下面)。 无论如何,我只能得到空arrays。 是不是可以与虚拟填充聚合? const […]

当我尝试将对象推送到MongoDB和Nodejs中的数组时,为什么会出现castError?

我有一个mongoDB,我试图让一个Nodejs服务器来操纵数据库中的数据。 当我尝试将评论推送到BlogPost对象中的Comments数组时,我得到了一个castError。 下面的源代码,请告诉我,如果你错过了重要的信息。 提前致谢! 路线: routes.post('/comments/push/:id', function(req, res) { const blogPostId = req.param('id'); const commentProps = req.body; BlogPost.findById(blogPostId) .then((blogPost) => { blogPost.comments.push(commentProps); return blogPost.save(); }) .then((blogPost) => res.status(200).json({ 'status': 'Comment is deleted.', 'comment': blogPost })) .catch((error) => res.status(400).json(error)) }); BlogPost架构: const BlogPostSchema = new Schema({ content: { type: String, validate: { validator: (content) => content.length […]

Mongoose的精简使用与填充和嵌套查询

我在使用MongoDB的Node.js中编写一个应用程序。 我selectMongooseJS来处理我的数据库查询。 我有两个相互引用的集合( Room集合中包含的“上级”集合和DeviceGroups )。 我有一个查询从Room集合中获取所有房间的列表,填充deviceGroups字段(这是Rooms参考到DeviceGroup集合),里面有一个map方法,通过Room集合中find的每个房间,每个房间都会进行另一个查询 – 它会查找DeviceGroup集合中的任何deviceGroups组,这些设备组是在地图方法中引用到当前房间的。 我的目标是返回所有包含deviceGroups字段的房间的列表,而不仅仅是引用。 在查询之后(在then方法中)我得到的是一个Mongoose文档。 整个algorithm被用作GET方法的处理程序,所以我需要一个纯JavaScript对象作为响应。 我想实现的主要目标是将所有的查询和人口的结果作为纯javascript对象,所以我可以创build一个响应对象,并发送它(我不想发送数据库返回的一切,因为不是所有的这种情况下需要数据) 编辑: 我很抱歉,我删除了我的代码,并没有意识到这一点。 我目前的代码如下: 架构: const roomSchema = Schema({ name: { type: String, required: [true, 'Room name not provided'] }, deviceGroups: [{ type: Schema.Types.ObjectId, ref: 'DeviceGroup' }] }, { collection: 'rooms' }); const deviceGroupSchema = Schema({ parentRoomId: { type: Schema.Types.ObjectId, ref: 'Room' }, groupType: […]

mongoose – 通过标准在子文件中查找

我刚刚陷入这个问题。 我有两个mongoose模式: let userSchema = new mongoose.Schema({ username: { type:String, default:null }, email: { type:String, required:true }, role: { type: mongoose.Schema.Types.ObjectId, ref: 'Role', required: true }, }); let roleSchema = new mongoose.Schema({ name: { type:String, default:"Player" }, privileges: [ { resource: String , actions: [ String ] }, ], }); 问题si如何find具有特定条件的用户例如获取所有用户angular色名称=“超级pipe理员”我试着这个没有结果 User.find({'role.name':'Super Admin'}).populate('role') .exec() .then(results […]

如何使async.each等待.save()完成?

我正在尝试使用mongoose将一些数据保存到我的collections中。 //tried with async each async.each(indexes, function(index, callback) { newChampion.ID = champions[index].id; newChampion.Key = champions[index].key; newChampion.Name = champions[index].name; newChampion.Title = champions[index].title; Champion.addChampion(newChampion, function(err) { if (err) { console.log(err.message); callback(); } else { callback(); } }); 问题是,它只推动了对应于最后一个索引的值(133个值中的一个)。 我有唯一的ID,所以这就是为什么在数据库中只有一个值被保存。 我把一个console.log放入addChampion函数,133次我看到相同的值。 添加下面添加的冠军片段: module.exports.addChampion = function(newChampion, callback) { newChampion.save(callback); } 我如何解决这个问题,为了把所有的133值推入到数据库?