Articles of mongoose

mongooseorderby不工作

我正在build立一个简单的分贝来存储游戏的高分。 现在我想检索高分作为sorting列表。 不幸的是,我不明白为什么下面的代码将无法正常工作,返回的列表不按sorting属性sorting。 var mongoose = require('mongoose'); var Score = mongoose.model('Score'); router.get('/', function(req, res, next) { Score.find( { $query: {}, $orderby: { score : -1 } } , function(err, scores) { if (err) {return next(err);} res.json(scores); }); });

MongoDB聚合:$存在的任何值

我试图利用MongoDB聚合RESTful api,但陷入了下面的情况。 假设我有Subscriptions模型,看起来像这样: var mongoose = require('mongoose'), Schema = mongoose.Schema; var SubscriptionSchema = new Schema({ // … cancelled: Date }); 如果订阅处于活动状态,则cancelled属性可以是undefined ,也可以是用户取消操作的Date 。 现在,我有一个GET /me/subscriptions ,它聚合了订阅,并有一个可选的查询参数: cancelled=true (只显示取消)或cancelled=false (只显示活动)。 如果没有指定,应该返回任何订阅(激活或取消)。 var express = require('express'), router = express.Router(), Subscription = require('../../models/subscription'); router.get('/me/subscriptions', function(req, res, next) { var cancelled = req.query.cancelled === 'true' ? { $exists: true […]

图式数组中的mongoose数

我需要在模式中查找元素,然后统计它们发送的总消息。 我已经尝试了以上代码,但不适合我。 User.find({type: 'psycologist'}).exec(function (err, users) { if(err){ callback(new Error("Something went wrong"), null); }else{ Message.count({userFrom: { "$in" : users} }).exec(function (err, counter) { if(err){ callback(new Error("Something went wrong."), null); }else{ console.log(counter); //displays 0 callback(null, counter); } }); } }); 消息架构 var schema = new Schema({ content: {type: String, required: true}, type: {type: String, required: true, […]

Mongoose – 查询获取文档的所有子文档

我对mongoose很新,我有一个公司名单,每个公司都有一个用户的子arrays。 我只想用mongoose检索特定公司的所有用户: 一个单一的公司就像 { "_id": "57ffa47f5b70f90831212348", "name": "mycompany", "address": "…", "phone": "…", "users": [ { "_id": "57ffa47f5b70f90831212347", "username": "alpha", "name": "myname", "surname": "mysurname", "password": "…" } ] } 我试着用 Company.findOne({ 'name': req.user.name }) .aggregate({$unwind: '$users'}) .exec( function(err, users) { if (err) res.status(500).send(err); res.json(users); }); 但我没有运气…我不知道如何正确使用聚合。

Mongodb只有在匹配的组合不返回真的时候才能find并插入

我必须在行动集合中插入一个批处理,如下所示: [ { "userId": "57ee65fef5a0c032877725db", "postId": "57f63ce196b01748e4712ed3", "type": "like" }, { "userId": "57ee65fef5a0c032877725db", "postId": "57f7335223a76c0f780a44c5", "type": "dismiss" }, { "userId": "57ee65fef5a0c032877725db", "postId": "57f7335223a76c0f780a44c5", "type": "dislike" } ] 操作集合的模式如下所示: const ActionSchema = new mongoose.Schema({ userId: mongoose.Schema.Types.ObjectId, postId: mongoose.Schema.Types.ObjectId, type: String }, { timestamps: true }); 但在插入之前,我想确保这个数组中的这个特定的“userId”和“postId”在db的action collection中没有匹配的组合。 由于用户只能执行由其他用户发布的特定post的单个操作。

在Node.js中用MongoDB删除上传的文件

我有两个实体之间的一对多关系:课程和文件。 所以,我设置我的数据库的方式是使用两个独立的集合:课程和文件。 var CourseSchema = new mongoose.Schema({ name: { type: String, required: true }, code: { type: String, required: true, unique: 1, uppercase: 1 }, files: [{ type: mongoose.Schema.Types.ObjectId, ref: 'File' }] // more fields }); var FileSchema = new mongoose.Schema({ name: { type: String, required: true } // more fields }); 我有一个工作页面,允许用户在课程中上传和添加文件。 同样,他们也可以在同一页面上删除选定的文件。 我担心的是当我删除选定的文件。 […]

如何promisify我使用NodeJS蓝鸟创build一个正则函数?

我第一次用Mongoose方法调用testing了Bluebird。 这很容易,只需要做Promise.promisifyAll(myObj) ,然后调用myObj.methodAsync 但是当我试图在没有mongoose的情况下实现它时,我不知道该怎么做,例如: function Foo(){} Foo.prototype.test = function(c,cb){ cb(new Error(),{a:1, b:2, c:c}); }; module.exports = new Foo(); 这会引发这个错误。 未处理的拒绝(<{“a”:1,“b”:2,“c”:true}>,没有堆栈跟踪)。 这是要catch ,我可以使用它没有错误。 任何人都知道如何实现我的方法来与承诺实现良好的工作?

MongoDB mongoose子文档创build两次

我正在使用一个简单的表单,可以用来注册一个网站的文章。 后端看起来像这样: // Post new article app.post("/articles", function(req, res){ var newArticle = {}; newArticle.title = req.body.title; newArticle.description = req.body.description; var date = req.body.date; var split = date.split("/"); newArticle.date = split[1]+'/'+split[0]+'/'+split[2]; newArticle.link = req.body.link; newArticle.body = req.body.body; var platforms = req.body.platforms; console.log(platforms); Article.create(newArticle, function(err, createdArticle){ if(err){ console.log(err.message); } else { var counter=0; platforms.forEach(function(platform){ var platformed=mongoose.mongo.ObjectID(platform); Platform.findById(platformed, […]

值被添加到数据库input结束,而不是更新相关的列

我目前正在使用MongoDB,Express和Angular,并遇到了一个问题。 当我尝试更新数据库中的列数据时,它会在最后添加。 下面是代码。 function addSupporters(candidate){ Supporter.find({"name": "Susan Sullivan"},function(err,supporter){ supporter.candidateName = candidate; }) } 这段代码更新candidateName给他们支持的人。 这是从下面的方法调用。 router.incrementUpvotes = function(req, res) { Candidate.findById(req.params.id, function(err,candidate) { if (err) res.send(err); else { addSupporters(candidate.name); candidate.support += 1; candidate.save(function (err) { if (err) res.send(err); else res.json({ message: 'Candidate Upvoted!', data: candidate}); }); } }); } 当一个人上传或“支持”他们,并将候选人名称添加到支持者时, incrementUpvotes调用addSupporters(candidate.name) 。 我得到的输出是… [ { […]

Mongoose保存返回正确的保存对象,但不保存到数据库

我正在做一个findOne,然后保存。 这是覆盖以前的保存对象。 问题是保存res.json()在我的callback后返回正确更新的数据(又名myObject修改通过我的for循环)。 但是“保存”似乎并没有实际发生,因为数据库仍然显示myObject在旧状态。 var pathList = [{id:'x',url:'#'}]; MyObjects.findOne({'_id': _id}, function(err, myObject) { // for ( var i in myObject.body.module ) { for (var j = 0; j < pathList.length; j++ ) { var id = pathList[j].id; myObject.body.module[i].channel[id].buffer = { url:pathList[j].url }; } } // myObject.save(function(err, data) { if (err){ res.json({'response':'Error in saving track: '+err}); […]