Articles of mongoose

用Mongooseembedded文档

我有一个简单的Mongoose模式称为问题,存储一个问题及其可能的答案。 答案是一个单独的模式,并作为embedded式文档存储在问题中。 这是架构: var ResponseSchema = new Schema({}); var AnswerSchema = new Schema({ answer : String , responses : [ResponseSchema] }); var QuestionSchema = new Schema({ question : {type: String, validate: [lengthValidator, "can't be blank."]} , answers : [AnswerSchema] }); 我正在尝试创build一个允许用户input一个问题和一些答案的表单(我正在使用express和jade)。 以下是我到目前为止: form(action='/questions', method='post') fieldset p label Question input(type='text', name="question[question]") div input(type='submit', value='Create Question') 以下是我如何保存它: […]

如何在mongoose中设置objectId属性?

我有一个名为消息像下面的模式; Message = new Schema({ id: Number, sender: ObjectId, receiver: ObjectId, date: Date, content: String, type: Number }); 和下面的用户架构; User = new Schema({ id: Number, username: String, isOnline: Boolean }); 我想在收到新消息时设置消息项目的发送者和接收者属性。 收到消息时,我正在创build一个新的消息文档并设置其属性。 但我不知道如何设置发送者和接收者属性(这应该是对用户文档中的实体的引用)。 我正在使用的代码如下所示。 您可以尽可能多地判断代码,这就是我想要的。 我不知道摆脱它的正确方法。 但似乎这不是一个。 当我使用下面的代码,我看不到发件人和接收器属性设置。 我认为这可能是因为findOne是asynchronous的(我不知道它是否是)。 var m = new Message(); m.content = messageData.text; m.id = messageId; User.findOne({id: socket.userId}, function (e, o) […]

如何获得一个蒙古collections的孩子的关键?

我有一个像这样的收集用户: { _id: myid, name : 'blabla', ia : { [0]-> 'an id', [1]-> 'a second id' } } 我想只有我的第一个ID的ia,所以我尝试了这样的事情: User.find({ _id: id, ia :{ key : indexia} }, ['ia']).populate('ia').run(rendu); 其中id = myid,indexia = 0。 如果我不把这部分:“ia:{key:indexia}”我得到我所有的ia …但我只想要一个。 希望我清楚。 谢谢

Mongoose和Kue – Node.js – 传递的对象没有方法保存

我正在使用mongoose和Kue的stream量控制。 我将从数据库检索到的对象传递给Kue。 当作业得到处理时,对象已经不再有一些function,比如.save()&others。 jobs.process('process', 5, function(job, done) { var url = job.data.url; var objo = job.data.comp; request({uri:url, json:true}, function(err, res, body) { objo.meta = body; // Here it throw an error that save is note defined // TypeError: Object #<Object> has no method 'save' objo.save(function(err) { if (err) throw err; console.log('Saved data for ' + […]

自定义错误在throw语句或next()调用中不能正确传播

我正在开发一个Node.js / CoffeeScript应用程序,我正在使用类层次结构的错误。 当我在路由处理程序的根中使用throw语句时,一切正常。 class APIError extends Error constructor: -> app.error (err, req, res, next) -> if err instance of APIError console.log 'APIError captured' app.get '/', (req, res, next) -> throw new APIError 但是,在Mongoose中,在callback函数中使用throw语句: app.get '/', (req, res, next) -> UserModel.where('name', 'Joe').findOne (err, doc) -> throw new APIError 结果是 /usr/local/lib/node_modules/mongoose/lib/utils.js:413 throw err; ^ Error: 当我调用next()而不是,如 […]

MongoDB位置NearBy唯一

我已经在数据库中创build了一个集合,并使用适当的索引进行更新,以将其恢复。 我正在与folloging 例: db.car.save({ "name":"Toyota car", "affiliation":"Toyota", "loc":{"lon":55.93939251390387,"lat":-113.999}}) db.car.find({"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}}) 我在数据库中有100K +logging,当我search上面的查询时返回20Klogging。 其实这在“名称”列中有一些重复的值。 我怎样才能得到“名称”的独特价值。

使用会话设置created_by用户与一个Mongoose插件

即时通讯使用Node.js ,我试图做一个Mongoose插件,将created_by值设置为当前login的用户ID。 用户存储在会话中。 lastModifiedPlugin = (schema, options) -> schema.add created_by: type: ObjectId default: -> session.user._id // Need access to session created_at: type: Date default: Date.now 我正在使用connect-mongo来获取MongoDB会话存储。 express = require "express" MongoStore = require("connect-mongo")(express) 我知道如何从请求对象中获取会话,或者在拥有sessionID时使用会话存储。 问题是:在这种情况下,我没有请求,也没有会话,也没有sessionId。 我的问题:如何在Mongoose插件中获得会话? 或者如何以不同的方式实现这个function,就像轻松一样? 在我看来,这是一个非常常见的用例。

有一个简单的方法来获得嵌套的儿童参考?

我有这样的架构(简化) var Language = new Schema({ name: String }); var PartOfSpeech = new Schema({ name: String, language: { type: ObjectId, ref: "Language" } }); var Attribute = new Schema({ name: String, partOfSpeech: { type: ObjectId, ref: "PartOfSpeech" } }); 有没有简单的方法来查询MongoDB,如果给定一个语言的_id ,它将返回一个结果集,其中包含引用该语言的所有PartOfSpeech条目,以及引用每个词类的所有Attribute条目? 结果集看起来像这样: [ { name: "Noun", attributes: [ { name: "Plural" }, { name: "Possessive" […]

在MongoDB文档的子对象中_id(使用Mongoose)

我在Mongoose中创build了这样一个结构: var Access = new Schema({ userId : { type: ObjectId, unique: true }, key : { type: String, index: true }, isOwner : { type: Boolean, index: true }, }); mongoose.model('Access', Access); var Workspace = new Schema({ name : { type: String, lowercase: true, unique: true}, activeFlag : Boolean, settings : { welcomeMessage : […]

如何在mongoose + express中使用模式方法

当我尝试从exports.index.post运行user.comparePassword(见下面)时,出现以下错误 – 我粘贴了所有代码以帮助缩小问题的范围。 UserSchema.pre('save')方法工作正常,但不是在./routes/account.js(我使用mongoose3) 这是我得到的错误。 Caught exception: [TypeError: Object { username: 'test4', email: 'test4@test.com', password: '$2a$10$Ix5vCuVYGIU7AmXglmfIxOyYnF6CiPJfw9HLSAGcRDxMJEttud/F6', _id: 505fee7ce28f10711e000002, __v: 0 } has no method 'comparePassword'] ## ./app.js app.post('/account', routes.account.index.post); ## ./models/user.js var mongoose = require('mongoose') , bcrypt = require('bcrypt') , Schema = mongoose.Schema , db = mongoose.createConnection('localhost', 'mydb'); var UserSchema = new Schema({ username : […]