Tag: mongodb query

meteor比较集合中的embedded式数组

我有三个集合: UserCollection , DepartmentCollection和QuestionsCollection QuestionsCollection是一个可configuration的问题列表。 用户和部门各自回答从QuestionsCollection生成的调查,结果每个都有embedded的questionAnswer对象数组,每个对象都有一个questionid和一个answer属性。 UserCollection中的用户文档示例如下: { id:SoEtnNvN8B3QYcd3N, questionAnswers:[ { questionId: 1, answer: "melbourne" }, { questionId: 2, answer: "10"}] } } 部门将具有相同的embedded式数组,但可以包含更多或更less的questionAnswer对象。 当然有不同的或相同的答案。 问题: 我想要做的是能够得到一个单一的用户questionAnswers数组作为search条件,并看看有多less部门匹配这些questionAnswers。 匹配将在两个属性上匹配,并且用户必须回答部门已经回答的相同问题以匹配例如 如果部门回答了比用户更多的问题,那么它自动不会匹配。 如果用户和部门回答相同数量的问题,则所有questionAnswer值应匹配。 如果用户回答了比部门更多的问题,则所有的部门questionAnswers必须包含在用户questionAnswers内。 答案是完全匹配,但我可能需要某种机制来进行范围search。 我已经看了可能build立一个使用用户questionAnswers数组查询和使用$ elemMatchsearchDepartmentCollection,但我不知道如何实现这一点。 任何帮助或方向将不胜感激。

mongo查询 – 属性是否存在?

在一个集合文档中,有一个“sub”属性是一个包含一个或多个属性的对象。 集合看起来像:(我已经删除了无关的其他属性) "properties": { "source": { "a/name": 12837, "a/different/name": 76129 } } 我需要在集合中find/ name和/ different / name是variables。 variablesembedded正斜线,因为它们是mqtt主题名称,以防万一您想知道。 (的node.js) 我试过了: collection.find({'properties.source[variable containing name]': {$exists: true}}).toArray(function… 不工作,没有任何返回 我也试着设置一个查询string,如下所示: var q = util.format('properties.source.%s', variable containing name); collection.find({q: {$exists: true}}).toArray(function… 查询错误失败 如果他们是问题,我可以用其他字符replace前斜线,但是我怀疑他们没问题。 我试图逃脱前斜线,这没有什么区别。 有什么build议么?

meteor上次在MongoDB中执行查询?

meteor蒙古语和Mongodb查询是一样的。 我正在使用外部Mongodb。 所以我需要debugging我的查询。 他们有没有办法在Mongo中查找最后执行的查询?

mongoosePre命令不按预期工作

嗨,我是新来的mongoose试图使用pre命令转换给定的密码在string哈希值之前,将其保存在数据库中。 我没有得到任何语法错误,但我的密码没有被转换成散列IDS。 我的控制器代码如下: User.save(req.body,function(err,data){ if (err) { res.json({ sucess:false, exception:err }); } else{ res.json({ sucess:true, User:data }); } }); User.pre('save',function(next){ bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){ if(err){ return res.json({ success:false, exception:err }); } bcrypt.hash(password, salt, function(err, hash) { if(err){ return res.json({ success:false, exception:err }); } password=hash; }); }); next(); }); 使用节点检查器,我发现命令行不进入User.pre。所以有人可以让我知道我犯了一个错误。

mongoose:没有保存的对象数组

我正在尝试添加对象id到数组中(mongoose)(Node.js)。 这是我的代码: app.post('/api/users/:userId/favorites/:objectId', function(req, res, next) { User.findByIdAndUpdate(req.params.userId, {$addToSet: {user_favorites: req.params.objectId}}, {safe: true, upsert: true}, function(err, data){ if (err) return res.status(500).send(err) res.status(200).send({'message':'saved'}); }) }) 这是我的模型: module.exports = mongoose.model('User',{ … user_favorites: [{ type: mongoose.Types.ObjectId, ref: 'Property' }], … }) 没有错误被返回,但是ID不被添加到数组中。 我错过了什么?

Mongoose / mongodb – 每个ID只获取最新的logging

我有mongoose的检测模型: var InspectionSchema = new Schema({ business_id: { type: String, required: true }, score: { type: Number, min: 0, max: 100, required: true }, date: { type: Number, // in format YYYYMMDD required: true }, description: String, type: String }); InspectionSchema.index({business_id: 1, date: 1}, {unique: true}); 对同一个业务可能有多个检查(每个业务由一个唯一的business_id表示)。 但是,每个商家每天都有一次检查的限制,这就是为什么business_id +date有唯一的索引。 我还在Inspection对象上创build了一个静态方法,在给定business_ids列表的情况下,检索所有基础业务的检查。 InspectionSchema.statics.getAllForBusinessIds = function(ids, callback) { […]

MongoDB更新/插入文档并增加匹配的数组元素

我使用Node.js和MongoDB与monk.js,我想以一个最小的方式做一个文件每小时的日志logging,如: 最终文件: {time:YYYY-MM-DD-HH,log:[{action:action1,count:1},{action:action2,count:27},{action:action3,count:5}]} 应该通过递增一个值来创build完整的文档。 例如,某人在这个小时内首先访问一个网页,action1的增量应该用一个查询创build下面的文档: {time:YYYY-MM-DD-HH,日志:[{action:action1,count:1}]} 在这个小时内的另一个用户访问另一个网页,文档应该被扩展到: {time:YYYY-MM-DD-HH,log:[{action:action1,count:1},{action:action2,count:1}]} 并且访问不同的网页时计数值应该增加。 目前我创build了每个行动的文件: tracking.update({time:moment().format('YYYY-MM-DD_HH'),action:action,info:info},{$ inc:{count:1}},{upsert:true},function呃){} 这可能与monk.js / mongodb? 编辑:谢谢。 你的解决scheme看起来干净优雅,但看起来像我的服务器无法处理它,或者我不能让它工作。 我写了一个极其肮脏的解决scheme,以action-name为关键字: tracking.update({time:time,ts:ts},JSON.parse('{“$ inc”:{“'+ action +'”:1}}'),{upsert:true},function(err){ });

Mongoose / MongoDB更新不起作用

我知道这个问题已经在这里被打死了,但我已经尝试了一切,无法解决这个问题。 这让我发疯。 我有一个看起来像这样的模型: customer { email: String, password: String, addresses: [addresses_schema] } 和addresses_schema看起来像 address { addr1: String, … Other address fields primary_address: Boolean } 现在,我想更新一个用户的特定地址logging,以使primary_address为true。 所以我这样做: var modifyUser = function(address_id){ User.findOne( { email: email } ).then(function(user){ user.update({ 'addresses._id': address_id }, { $set: { 'addresses.$.primary_address': 'true' } } ) .then(function(){ console.log('Should eventually reach here'); }).catch (err) […]

MongoDB使用mongoose驱动程序:如何查询文档的数组属性的子集?

我收集了选民登记资料。 这些forms如下: voter = { name: "Some name", registrationDate: "2015-10-21T15:41:36+00:00", votingHistory: ["2015-10-21T15:41:36+00:00", "2015-7-21T15:41:36+00:00"] } 我需要能够检测投票历史数组的一个子集的大小。 例如,这是我试过的一个问题: voters.find({ votingHistory : { $all : {$size : { $gt : 8 }}, { $gt : "2015-7-21T15:41:36+00:00" }} }) 这个查询的意图是在2015年7月21日之后find所有至less有8个logging投票的选民。 有mongoose的方式来查询数组属性的子集的大小吗? 例如,有以下三个条目: { name: "name1", VotingHistory: ["2015-10-21T15:41:36+00:00", "2013-7-21T15:41:36+00:00"] }, { name: "name2", VotingHistory: ["2015-10-21T15:41:36+00:00", "2011-7-21T15:41:36+00:00"] }, { name: "name3", […]

Mongodb:在指定的时间之间获取文档,而不考虑date

假设Mongodb数据库中的示例文档如下所示: { "date" : ISODate("2015-11-09T05:58:19.474Z") } { "date" : ISODate("2014-10-25T07:30:00.241Z") } { "date" : ISODate("2015-11-30T15:24:00.251Z") } { "date" : ISODate("2012-01-10T18:36:00.101Z") } 预期: { "date" : ISODate("2015-11-09T05:58:19.474Z") } { "date" : ISODate("2014-10-25T07:30:00.241Z") } Iam感兴趣的是查找“date”字段在04:15和07:40之间的文件,而不pipedate,月份和年份。 间接查询必须匹配date字段中的任何“YYYY-MM-DDT”。 我的方法是,从节点查询所有文档中的所有文档,然后查询匹配查询的每个文档,比较文档的“date”字段与“yyyy-MM-DDT”+“required_time”(“YYYY-通过使用moment.js模块将MM-DD从每个文档的“date字段”中复制,以便通过转换为moment()并获取月份,date和年份来进行比较。 有没有什么方法可以直接得到相同的结果? 注意:我正在使用nodejs连接到mongodb 这个问题是基于Mongodb:基于ISODate格式的查询 。