Tag: mongoose

了解Mongoose子文档

我正在学习mongoose。 目前我做了一些很好的事情,但我真的不明白Mongoose如何pipe理Schema之间的关系。 所以,容易的事情(我希望):我正在做一个经典的练习(我自己,因为我找不到一个很好的教程,创build超过2个模式)与3个模式: 用户,发布,评论。 用户可以创build多个Post; 用户可以创build很多评论; post属于用户。 评论属于用户和post。 我不认为这是非常难呃? 目前我可以很好地pipe理用户和邮政之间的关系。 我的unit testing返回正是我所需要的,此刻我正在使用mongo-relation ,我不知道这是不是一个好主意… it('Use should create a Post', function(done) { User.findOne({ email: 'test@email.com' }, function(err, user) { var post = { title: 'Post title', message: 'Post message', comments: [] }; user.posts.create(post, function(err, user, post) { if (err) return done(err); user.posts[0].should.equal(post._id); post.author.should.equal(user._id); // etc… done(); }); […]

在nodejs(asynchronous)循环和callback中寻找适当的模式

我已经阅读了几篇文章和文章,但是我不太明白。 我在Mongoose模型中有一段代码,主要负责邀请人们参与项目。 鉴于一些被邀请者,我期待看看他们是否在数据库中,如果没有,我会继续创build它们并更新被邀请者列表中的ID。 jslint抱怨循环,我正在努力与callback(和正确的总体模式,当你有一个循环,与数据库保存callback。显然我想要发生的是循环完全完成,任何新用户都添加到数据库,ID是在原始哈希(受邀者)更新,然后callback发生。 ProjectSchema.methods.invite = function invite(invitees, callback) { var User = mongoose.model('User'); var emails = _.pluck(invitees, 'email'); // loop through invited hash to see if we already have those users in the db User.find({ 'email': { $in: emails}}, function (err, users) { for (var invited = 0; invited < invitees.length; invited++) { var […]

TypeScript中的Mongoose方法范围

我有一个关于在Mongoose方法的callback函数中的对象范围的问题。 我的员工有“地址”。 当你调用这个“方法”时,它会查找地址模型中的地址。 使用Javascript: employeeSchema.methods.getAddresses = function (callback) { addressModel.find({ _id: { $in: this.addresses } }, function (err, obj) { callback(obj); }); }; 我想把所有的东西都打出来,并且在函数中的'this'范围有问题。 范围在对象本身上,但所有示例都显示“this”。 这在TypeScript中不起作用,因为它认为它是主类。 打字稿: employeeSchema.methods.getAddresses = (callback) => { addressModel.find({ _id: { $in: this.addresses } }, (err, obj) => { callback(obj); }); }; 我有同样的问题与validation: accountSchema.path('email').validate(function (email, callback) { if (this.isNew || this.isModified('email')) […]

mongoosefindOne范围怀疑

我是新来的这个JavaScript的东西,我有一些关于mongoose'发现'范围的怀疑。 我写了下面的代码来试图理解这个问题。 下面的代码search购物集合,然后search分配给此购物的商店。 storeMap是storeId => storeObject的散列表,但是当Store.findOne范围结束时,storeMap似乎回滚到一个空的数组… var storeMap = {}; Shopping.findOne({ name: shoppingName }, function(err, shopping){ shopping.stores.forEach(function(storeId) { Store.findOne({_id: storeId}, function(err, store) { if(err) console.log(err); console.log(store); //prints out store data storeMap[storeId] = store; console.log(storeMap); //prints out store data }); console.log(storeMap); //prints out an empty array }); }); 那么,为什么我的storeMap数组正在打印一个空数组而不是一个存储数组?

在AngularJS,NodeJS,MongoDB,Mongoose和ExpressJS中使用单一表单发布到多个集合

我想要一个表单发布到mongo的两个集合。 HTML看起来像什么 <form> …Field1 …Field2 …Field3 …Field4 </form> 控制器会是什么样子 app.controller….. $scope.var = {$scope.fields}….. $http post… …Field 1 & Field 2 to Mongo Collection 1 …Field 3 & Field 4 to Mongo Collection 2 基本上不需要2个独立的表单来提供2个集合。 这可能吗? 提前致谢 追

AWS-SDK S3 deleteObjects返回MalformedXML?

使用aws-sdk(2.0.18)作为node.js,我试图用deleteObjects方法删除多个对象。 delete: function (objects, callback) { var s3delete = new AWS.S3(); var params = { Bucket: config.s3.bucket, Delete: { Objects: objects } }; s3delete.deleteObjects(params, function (err, deleted) { if (err) { console.log(err, err.stack); return callback(err); } return callback(null, deleted); }); } 我的params对象看起来像这样: { Bucket: 'bucketname', Delete: { Objects:[ {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"} […]

为mongodb REST API编写通用查询函数

我使用node.js表示MongoDB和Mongoose为我的应用程序创buildrestAPI。 我想知道有什么样的types来代替下面的代码更通用? 我不想一直通过所有的参数,只是在一定的时间。 大部分时间我只想通过他们的一部分。 通常在Java中,我创build这样的东西的build设者,但我不知道JavaScript的任何技巧:) exports.getMessages = function (req, res) { var from = req.query.from; var deleted = req.query.deleted; var readed = req.query.readed; if(from && deleted && readed) { Message.find({to: req.user.email, from: from, deleted: deleted, readed: readed}, function(err, messages) { if(err) { res.send(err); } res.json(messages); }) } else if(from && deleted) { Message.find({to: req.user.email, from: […]

模型定义之前定义的中间件,级联删除失败,出现中间件被绕过

这是我在我的文件中。 我想要做的是当一个Author文档被删除,他所有的Book文档也应该被删除。 我最初尝试使用连接error handling程序的串行中间件,但没有错误logging, Author被删除,但他的Book没有。 然后我尝试了并行中间件,假设remove()不会被触发,直到所有的前中间件都完成了,但似乎并不是这样。 Author仍被删除,但Book没有,也没有错误logging: //… var Book = require('./book-model''); AuthorSchema.pre('remove', true, function(next, done) { Book.remove({author: this._id}, function(err) { if (err) { console.log(err); done(err); } done(); }); next(); }); AuthorSchema.statics.deleteAuthor = function(authorId, callback) { var Author = mongoose.model('Author'); Author.remove({_id: authorId}, callback); }; // … module.exports = mongoose.model('Author', AuthorSchema); 所以我在考虑中间件被绕过,否则考虑到我尝试过的变化的数量,我会看到至less有一些错误,表明中间件确实被触发。 不幸的是,我似乎无法指出我做错了什么。 请指教。

卡住实施一个嵌套的数据过滤循环,可能是一个更优雅的方式做到这一点?

这是数据。 我想要做的就是将所有这些数据注入到一个包含所有类别和所有属于这些类别的书籍的variables中: var categories = [ // … { "_id" : "5436b12b456f61180f815c06", "name" : "Horror" }, { "_id" : "5436b43f18bbc8a8073e786e", "name" : "Action" } // … ]; var books = [ // … { "_id" : "5436b43f18bbc8a8073e786d", "title" : "The Bourne Legacy", "category" : "5436b43f18bbc8a8073e786e" }, { "_id" : "5436b5c9de9884e010d5ef24", "title" : "Digital Fortress", "category" […]

Mongodb,mongoose – dynamic设置TTL时间

我指的是这个时间生活在蒙古,mongoose不工作。 文件不会被删除问我的问题:是否有可能dynamic地设置MongoDB的TTL时间? 所以我们假设你有令牌收集,你想用它来达到不同的目的。 在这种情况下,每次创build令牌时,都会为每个令牌设置特定的TTL。 如果这是可能的,你能否提供一些代码片段?