Tag: mongodb query

MongoDB平均embedded式数组作为额外的领域

我的文件看起来像这样: { "_id" : "53ce85eda2579da8b40c1f0f", "name" : "Autokino", "tags" : [ "forMen" ], "ratings" : [ { "rating" : 5, "uuid" : "…"}, { "rating" : 4, "uuid" : "…"}, { "rating" : 4, "uuid" : "…"}, { "rating" : 1, "uuid" : "…"}, ] } 现在我需要ratings.rating的平均值(这里应该是3.5)。 我的查询如下所示: activities.aggregate([ { $match: { _id: ObjectID(req.params.id) } […]

以primefaces方式更新数组项

基本问题: 我怎样才能检查一个文档的子数组,看看是否存在一个条目,更新它,如果它没有,或者添加它,如果它不是primefaces的方式? 我也想自动调整计数器(使用$inc ),具体取决于第一个操作的结果。 完整的解释: 我试图写一个方法来为任意的mongodb文档提供primefaces的“upvote”或“downvote”function。 我想要发生的是以下几点: 将“投票”和“投票评分”项添加到给定的模式 “投票”是由选举人的投票types(向上或向下)和userId组成的一组对象 “voteScore”是所有选票的总和(+1为upvote,-1为downvote) 我试图实现的逻辑是: 当用户投了一个向上或向下的投票,然后使用primefaces$inc操作符相应地更新“voteScore”,并使用该用户的ID和投票types将新的投票添加到数组中。 当用户改变他/她的投票时,voteScore会自动更新,投票将从数组中删除(如果voteType为"none" ),或者更改voteType以反映更改。 我怎么去做这个? 我假设我将不得不使用ether document.update()或model.findOneAndUpdate() ,因为传统的MongooseArray方法 (后跟save() )不会是primefaces的。 到目前为止,我有下面的代码,但它不工作: var mongoose = require('mongoose'); var voteTypes = ['up', 'down']; var voteSchema = new mongoose.Schema({ userId: { type: Schema.Types.ObjectId, ref: 'User', }, voteType: { type: String, enum: voteTypes } }); exports.schema = voteSchema; exports.plugin = […]

mongodb upsert是否使用查询字段?

当使用upsert更新时,驱动程序将查询和$ set对象组合起来。 这里是一些示例代码 db.collection('objects').update({_key: 'test1'}, {$set: {a:1}}, {upsert: true, w: 1}, callback); 当我这样做,如果文件test1不存在,mongo似乎插入以下文件。 { _id: , _key: 'test1', a: 1 } 所以它把查询中的关键字作为一个字段和a:1一起使用 这是什么不同于: var data = { _key : 'test1', a: 1 }; db.collection('objects').update({_key: 'test1'}, {$set: data}, {upsert: true, w: 1}, callback); 第二个是由于覆盖_key而变慢。 在_key上有一个索引。

在nodejs中的Mongodb Tailable Cursor,如何停止stream

我使用下面的代码从mongodb capped集合中获取数据 函数listen(条件,callback){ db.openConnectionsNew( [req.session.client_config.db] , function(err, conn){ if(err) {console.log({err:err}); return next(err);} coll = db.opened[db_name].collection('messages'); latestCursor = coll.find(conditions).sort({$natural: -1}).limit(1) latestCursor.nextObject(function(err, latest) { if (latest) { conditions._id = {$gt: latest._id} } options = { tailable: true, awaitdata: true, numberOfRetries: -1 } stream = coll.find(conditions, options).sort({$natural: -1}).stream() stream.on('data', callback) }); }); } 然后我使用sockets.broadcast(roomName,'data',document); 在客户端 io.socket.get('/get_messages/', function(resp){ }); […]

MongoDB将相关的收集项目数与其他收集结果合并

我是新来的MongoDB,并试图找出如何有效地查询集合中的每个项目。 我有projects集合和tasks集合 //projects { _id: ObjectId(), name: String } //tasks { _id: ObjectId(), projectId: ObjectId(), //reference project id completed: Bool } 我想获得所有的项目,然后计算每个项目已completed和incomplete任务 db.projects.find({})… //perhaps something similar in output [ { _id: ObjectId(), //projectId name: String completed: Number, incomplete: Number } ] 我使用mongoose作为ORM。 我不知道这是可能的mongoose,甚至本地mongodb查询。 感谢任何帮助。 谢谢!

我如何检查用户是否已经在NodeJs中跟踪其他用户 – Mongoose

我有一个followSchema: var followSchema = mongoose.Schema({ user : { type: Number, ref: 'User'}, following : { type: Number, ref: 'User'} }); 我有两个用户。 首先,我需要列出他所关注的所有用户。 第二个,我需要检查他是否已经跟随我从第一个收集的一些用户。 我怎样才能以一种情感的方式在mongoose身上做到这一点。 要获得第一个用户的追随者列表并不难,但要检查第二个用户是否有一个更难,我不知道如何pipe理。

在NodeJs中将对象从一个集合移动到另一个集合的最佳方式

如何将对象从一个集合移动到另一个集合? 什么是最简单和最安全的方法来做到这一点? 我正在尝试: app.post('/doneList/:id',function(req, res){ var id = mongojs.ObjectId(req.params.id); var oneTodo; db.todoList.findOne({_id: id},function(err,docs){ db.doneList.insert(docs,function(err,doc){ res.json(doc); }); }); db.todoList.remove({_id: id}); }); 但是当我尝试它时会崩溃。

mongoose排除数组中的字段

我有这样的东西: Schema Subdocument name: String data: Mixed Schema Stuff documents: [Subdocument] 现在,在我的API中有两个端点,一个用于Subdocument ,另一个用于Stuff 。 当我想获得一个Subdocument我需要包含data字段,但是当我想要得到的Stuff ,我想显示这些子文档的名称,但我不想显示数据字段,因为是相当大的,它将不会被使用。 所以,为了保持清楚,数据不是私人的。 只是我不希望它从Stuff得到显示 我试着做: Stuff.findById(id) .populate("documents") .populate("-documents.data") 但这是行不通的…我得到的Stuff与包含name和data的Subdocument 。 当我调用populate("-documents.data") documents是一个数组,我想排除数组中的每个元素的data字段时,我觉得我错过了告诉mongoose。 编辑:对不起,我提供的架构是不适合我的情况。 在我的情况下,它不是embedded式的,而是一个参考,就像这样: Schema Subdocument name: String data: Mixed Schema Stuff documents: [{ type: Schema.Types.ObjectId, ref: 'Subdocument' }]

mongoose发现返回奇怪的对象

我目前的问题是与db.collection.find()mongoose命令。 我对mongoose / mongodb比较陌生,但是我已经掌握了它的概念。 这里是我一直试图运行的testing代码: mongoose.connect(url); function main() { var db = mongoose.connection; db.on('open', function() { db.collection('Tweet').find({id: 631460910368956400}, function (err, data){ console.log(data); }) /*var coll = db.collection('Tweet'); db.collection('Tweet').findOne({id: 631460910368956400},function (err, ret) { if(err) console.log(err); console.log(ret['id']); //db.close(); });*/ }); } main(); 从非注释字段返回的数据是一个奇怪的对象: { connection: null, server: null, disconnectHandler: { s: { storedOps: [], storeOptions: [Object], topology: […]

Node.js和MongoDB无法规范化查询

我有一个在服务器上工作了6个月的NodeJS脚本,本周我已经安装了一个新的服务器,并安装了所有更新版本的软件,包括mongojs,nodejs和mongodb,不知何故,我的代码不再工作。 代码的一部分: collect.findOne({$or: [{from_id: enviou, to_id: viu}, {from_id: viu, to_id: enviou}]}, {sort: {$natural: -1}}, function (err, echoData) { if (err || !echoData) { console.log("No messages found -rv",err); } else { console.log(echoData); } }); 给我错误: { [MongoError: Can't canonicalize query: BadValue Projection cannot have a mix of inclusion and exclusion.] name: 'MongoError', message: 'Can\'t canonicalize query: […]