Tag: mongodb query

如何通过引用对象获取所有的值?

我有以下模式。 var orgSchema = new Schema({ name : String, email : String, webiste : String }); var empSchema = new Schema({ name : String, email : String, role : String, org : { type: Schema.Types.ObjectId, ref: 'org'} }); var leaveSchema = new Schema({ emp : { type: Schema.Types.ObjectId, ref: 'emp'}, from : Date, to : […]

MongoDB聚合并匹配返回的键

事情是,我正在写一些代码从我的数据库获取用户消息。 数据库有sent_to , sent_by , 消息键和命令我下面得到的数据键是 db.users_messages.aggregate({$group: {_id: {to: "$sent_to", by: "$sent_by"}}}) 这将返回所有sent_to和sent_by Users_IDs的列表。 现在让我们假设,如果user1已经发送消息给user2 ,同时user2已经回复给user1 ,我希望它只返回user1 user2 ,而不是user2 user1 。 而当我稍后检查这个东西的时候,我还剩下分页的事情,因为我正在对汇总应用$限制 。 希望有人能帮助!

在mongoDB中查询改变string需要很长的时间

我在mongoDB中的整个数据集(大约300万个文档)上运行以下查询,将string的用户标识更改为int。 这个查询似乎并不完整: var cursor = db.play_sessions.find() while (cursor.hasNext()) { var play = cursor.next(); db.play_sessions.update({_id : play._id}, {$set : {user_id : new NumberInt(play.user_id) }}); } 我在同一个数据集上运行这个查询,它会相对快速地返回: db.play_sessions.find().forEach(function(play){ if (play.score && play.user_id && play.user_attempt_no && play.game_id && play.level && play.training_session_id) { print(play.score,",",play.user_id,",",play.user_attempt_no,",",play.game_id,",",play.level,",",parseInt(play.training_session_id).toFixed()); } else if (play.score && play.user_id && play.user_attempt_no && play.game_id && play.level) { print(play.score,",",play.user_id,",",play.user_attempt_no,",",play.game_id,",",play.level); }; […]

MongoDB在持久对象之间的原型inheritance

我很好奇,如果MongoDB有select保存一个对象与另一个对象(在同一模式)作为其“原型”。 例如: 假设我们在db中有一个对象,像这样 { name : 'foo', lastName : 'bar', email : 'foo_bar@baz.com' } 我想要做的是得到这个对象,并更新电子邮件(例如) 所以新的对象会变成这样: { name: 'foo', lastName : 'bar', email : 'some_other_email@baz.com' } 正如你可以看到这里有一个重复的数据(即名称和姓氏属性)。 我想要做的只是保存差异,然后对象将在电子邮件道具和原始对象像这样 { email : 'some_other_email@baz.com', __proto__ : originalObjectId //or whatever } 我知道我可以直接更新对象或保存对象的新副本,但我想有不变性,不保存整个对象,我只想保存从原来的差异。 这样的事情是可能的(这是我的意思是mongo支持和优化这样的一个)? (或通过一些像mongoose或类似的东西) 还是我必须自己实施呢? 欢呼声,布吉

mongoose查询与哪里

我有一个mongoose查询,发现用户得到,但尚未赎回的所有奖励。 Reward.find({user: user, redeemed: false}).exec(callback) 我想把它变成所有没有赎回的报酬,以及今天所赎回的报酬。 这是正确的路要走。 Reward.find({user:user}) .where('redeemed').equals('false') .where('redeemed').equals('true').gt(yesterday) .exec(callback)

我试图填充一些用户信息到文章查询

Mongo Populate 我试图填充一些用户信息到文章查询 exports.articleByID = function(req, res, next, id) { Article.findById(id).populate('user', 'displayName', 'email').exec(function(err, article) { if (err) return next(err); if (!article) return next(new Error('Failed to load article ' + id)); req.article = article; next(); }); }; 我得到错误 MissingSchemaError:架构尚未注册模型“电子邮件”。 有任何想法吗?? 这是架构 'use strict'; /** * Module dependencies. */ var mongoose = require('mongoose'), Schema = mongoose.Schema; /** […]

如何用sportsname过滤

我正在开发一个应用程序,我必须通过sportsname过滤。 我在后端使用Node.js和MongoDB。 这是我的代码: router.route('/user/:_id/explore/:sportsname') .get(function(req, res, next){ var query = Host.find(); if(req.query.sportsname){ query.where({sportsname:req.query.sportsname}); } query.exec(function(err,sportsname){ if(err) return next(err); res.json(sportsname); console.log(sportsname); }) }); 这是文件。 我想通过sportsnamesearch用户 [ { "_id":"5460e2af4ee5216f17000061", "maxplayer":"1", "minplayer":"11", "date":"10 August 2014", "venue":"google", "time":"Afternoon", "sportsname":"Lawn Tennis", "__v":0 }, { "_id":"5460ff1b4ee5216f17000065", "maxplayer":"0", "minplayer":"9", "date":"10 October 2014", "venue":"google", "time":"Early Morning", "sportsname":"Cricket", "__v":0 }, { "_id":"5461a4014ee5216f17000089", "maxplayer":"4", "minplayer":"29", […]

附加在Schemaless Array内

我是MongoDB的新手,到目前为止玩弄它,遇到了一个问题,在这里我试图在Schema-Less数组中添加多个对象时遇到困难。到目前为止,我尝试$ push追加数组内的多个对象,但是,有一个Mongo错误 。 [MongoError: Can't use $push/$pushALL within non-array 我不知道为什么我得到这个错误,当使用$推数组 架构: EventTypeSchema = new Schema(){ type: String, eventID: { type: Schema.Types.ObjectId, ref: 'User' } } PersonSchema = new Schema(){ PersonID: { type: Schema.Types.ObjectId, ref: 'User' } Invitation: [ ] //Schema-less } 在控制器我有访问到EventType和人员模型控制器: exports.update = function(req,res){ var event = new EventType(); event.type = 'EVENT'; event.eventID = […]

在dropDatabase之后不执行唯一的字段约束

我有一个Node / Mongoose / MongoDB项目,我使用Selenium WebDriver进行集成testing。 我的testing用例设置的一部分是在每次testing之前擦拭数据库。 我通过使用在这里被大量接受的方法通过命令行来完成此操作删除MongoDB数据库中的所有内容 mongo [database] –eval "db.dropDatabase();" 然而问题在于,运行这个命令之后,Mongo不再强制任何唯一的字段,比如我的Mongoose Schema定义的以下内容: new Mongoose.Schema name : type : String required : true unique : true 如果我在dropDatabase之后重新启动mongod ,那么再次强制执行唯一约束。 但是因为我的mongod是由一个单独的进程运行的,所以重启它作为我的testing用例的一部分会很麻烦,我希望不必要。 这是一个错误还是我错过了什么?

在MongoDB中使用$ addtoset添加元素到数组

我正在尝试使用addtoset更新集合内的数组的示例。 新的元素正在被添加,但并非如预期的那样。 根据addtoset,只有当它不在列表中时,才会添加一个新的元素。 问题: 它只是采取任何元素被添加。 这是我的代码示例 架构(mongo_database.js): var category = new Schema({ Category_Name: { type: String, required: true}, //SubCategories: [{}] Category_Type: { type: String}, Sub_Categories: [{Sub_Category_Name: String, UpdatedOn: { type:Date, default:Date.now} }], CreatedDate: { type:Date, default: Date.now}, UpdatedOn: {type: Date, default: Date.now} }); service.js exports.addCategory = function (req, res){ //console.log(req.body); var category_name = req.body.category_name; var […]