Articles of mongoose

更新MongoDB集合 – JavaScript

我正在尝试更新集合中的值。 用户点击一个button,并将与该button对应的数字发送到服务器以添加到集合中。 我不能得到集合更新,但它在控制台中正常工作,如果我使用db.orders.update() 订单型号: // DB Initiation stuff var orderSchema = new mongoose.Schema({ status: String, rated: Number }); var collection = 'orders'; var Order = db.model('Order', orderSchema, collection); module.exports = Order; 客户端(当点击button时) // starID = 5; id = 50e6a57808a1d92dcd000001 socket.emit('rated', {rated: starID, id: id}); socket.js: var Order = require('../models/orders'); socket.on('rated', function(data) { /* Probably a […]

在Mongoose Schema中的另一个数组中写入一个数组

这是mongoose纲要: var userschema = new mongoose.Schema({ user: String, imagen: [{ tags: [String], }] }); 我得到这个标签: var bodytags = req.body.tags; var tags = tbags.split(" "); 我从req.body获取标签,并把它们放在一个数组中。 但问题来了: var img = usermodel.findOne({ user: req.session.user }, function(err, user){ var img = user.imagen.push({ tags: undefined }); }); img.tags.push(标签); 而且,当我收到一个错误,就是types错误TypeError: Cannot call method 'push' of undefined 。 我怎样才能推动我的模式标签数组内的标签数组? 感谢您的提前! 编辑: […]

保存与mongoose

我尝试简单地将我的mongodb基础中的新用户保存到控制器文件中: var mongoose = require('mongoose'); var UserModel = mongoose.model('User'); // signup exports.create = function (req, res) { console.log(req.body); var user = new UserModel({ username: req.body.username, password: req.body.password, email: req.body.email }); user.save(function (err) { if (!err) { return console.log("created"); } else { return console.log(err); } }); } 在debugging模式下,我可以看到user.save()没有执行错误… 我不知道为什么,因为我在用户名/密码/电子邮件字段中获得正确的值。 在这里我的模型文件: var mongoose = require('mongoose'); var Schema […]

node.js上使用mongoose的string的多对多关系

我可以用最简单的演示page文件开始描述我的最佳方式: { name: "Page Name" blocks: { "top-content": 50f0ded99561a3b211000001, "bottom-content": 50f0ded99561a3b211000002 } } 有没有一种方法可以用mongoose来定义这种多对多的关系,这样我就可以用top-content和bottom-content类的string来查找它们了? 与此相关的关系就像在多对多的连接表中包含一个string一样。 重要: 我不想embedded我引用的块,因为它们可以被多个页面引用。

我如何访问Mongoose / nodejs中的callback函数内的值?

我写了一个函数,它使用Mongoose从mongoDB中读取一个项目,并且我想把结果返回给调用者: ecommerceSchema.methods.GetItemBySku = function (req, res) { var InventoryItemModel = EntityCache.InventoryItem; var myItem; InventoryItemModel.findOne({'Sku' : req.query.sku}, function (err, item) { // the result is in item myItem = item; //return item doesn't work here!!!! }); //the value of "myItem" is undefined because nodejs's non-blocking feature return myItem; }; 但是,正如您所看到的,结果仅在“findOne”的callback函数中有效。 我只需要将“item”的值返回给调用者函数,而不是在callback函数中进行任何处理。 有没有办法做到这一点? 非常感谢你!

按date分类mongoose模式数组

这是Schema: var userschema = new mongoose.Schema({ user: String, messages: [{ title: String, author: String, message: String, date: { type: Date, default: Date.now }, }], }); 我试图在按datesorting的单个页面中显示所有用户的消息。 我知道如何显示特定用户的所有消息,但如果我有多个用户,我不知道如何使用mongoose按date对他们的消息进行分类。 有没有办法做到这一点…? 感谢您的提前!

如何在没有在Mongoose中获取父项的情况下对子文档执行操作?

现在,如果我想删除一个子文档,我这样做: Post.findById(post_id).exec(function(err, post) { post.comments.remove({'_id': comment_id}); post.save(function(err) { res.end("Hooray!"); }); }); 这对我来说似乎并不是最理想的,因为每次删除评论时,整个post都会从DB中提取出来,并且附加了很多东西。 那么,是否可以修改子文档而不用提取父文档呢?

填充后错误的数组顺序

我有这个问题,但是我不能在这里粘贴整个代码,所以让我试着解释一下。 我需要通过idfind一些文件,并填充它的ObjectId的数组元素。 比方说,我有从用户集合中的以下文件: { _id: 1, "first_name":"Nick", "last_name":"Parsons", "email":"nick@movementstrategy.com", "password":"foo", "clients":[ "50f5e901545cf990c500000f", "50f5e90b545cf990c5000010", "50f5e90b545cf990c5000013" ] } find它后,我就像这样填充它的客户: User.findById(1) .populate('clients') .exec(function (err, user) { }); 上面的代码执行后,我有'用户'variables与客户端的填充数组。 但客户有错误的顺序,像这样: { _id: "50f5e901545cf990c500000f", "first_name":"cl1", }, { _id: "50f5e90b545cf990c5000013", "first_name":"cl3", }, { _id: "50f5e90b545cf990c5000010", "first_name":"cl2", } 应该: "50f5e901545cf990c500000f", "50f5e90b545cf990c5000010", "50f5e90b545cf990c5000013" 代替: "50f5e901545cf990c500000f", "50f5e90b545cf990c5000013", "50f5e90b545cf990c5000010" 有人有类似的问题,还是我幸运? 编辑:我已经添加了代码: http ://pastie.org/5901177在该代码中,我创build3个客户端,并推入到user.clients数组。 之后,我在user.clients数组的顶部添加了一个更多的客户端。 所以当我这样做 […]

mongoose钩访问原始参数

我想哈希我的用户密码创build一个帐号mongoose,设置一个钩子asynchronous散列的密码,并设置帐户_password属性。 var accountSchema = new mongoose.Schema({ name: {type : String}, _password : {type : String} }) accountSchema.pre('save', true, function hook (next, done) { next(); doHashPassword(done); }); var Account = mongoose.model('Account', accountSchema); Joe = new Account({name : "Joe", password : "secret"}); Joe.save(); 我如何在我的散列函数/钩子中访问Joe({名称:“Joe”,密码:“secret”})的原始参数? 由于密码未映射到私有属性(这是为了不意外地以明文forms设置密码) 提前致谢

MongoDB的ObjectId用法

我正在使用MongoDB和Mongoose ODM为我的NodeJS REST项目: 我的模型模式是: var playerSchema = new mongoose.Schema({ name: String, team: mongoose.Schema.Types.ObjectId }) 和服务器端 : app.post('/players', function(req, res) { Players.find(function(err, players) { res.json(players); }); }); 回应是: … { "_id": "511a6010e6ca7b0fe0af02ff", "name": "player-1", "team": "511a53e2e6ca7b151c09ce8d" } … 但我想要的东西是这样的: { "_id": "511a6010e6ca7b0fe0af02ff", "name": "player-1", "team": { _id: "511a53e2e6ca7b151c09ce8d" name: "team-1" } } 我做错了什么? 或者我还没有真正了解ObjectId? 谢谢!