Tag: mongodb query

如何在Mongoose / node中获得平均评分

我有一个在angularjs的前端工作的星级评定指令,我可以保存评级收集评级。 这里是我的评级架构/模型: var mongoose = require('mongoose'); module.exports = mongoose.model('Rating', { bourbonId: {type: mongoose.Schema.ObjectId, ref: 'Bourbon'}, userId: {type: mongoose.Schema.ObjectId, ref: 'User'}, rating: {type: Number, required: true}, ratingId : {type: mongoose.Schema.ObjectId} }); 以下是我需要的平均评分: 'use strict'; var mongoose = require('mongoose'), BourbonSchema = null; module.exports = mongoose.model('Bourbon', { BourbonId: {type: mongoose.Schema.ObjectId}, name: {type: String, required: true}, blog: {type: String, […]

MongoDB查询部分忽略限制

我正在运行一个查询,尝试从一个集合中获取25条logging,每条logging大约有3-4k条logging。 我需要这些由一个特定的Id,上升。 所以我创build了这个查询: var collection = mongoDb.collection('matches'); collection .find({ matchId: {$exists:true} }) .sort({matchId: 1}) .limit(25) .toArray(function(err, docs) { /* error management */ doIf(isVerbose, logger.info, 'Found {magenta:%s} records.', docs.length); }); 我遇到的奇怪的问题是它返回了22条logging。 当我交换方向(asc到desc)时,它返回了全部25。 我查了一下,发现如果我为search增加一个索引可能会更好,所以我将它添加到了mongo CLI中: db.matches.createIndex({matchId:1}); 并在我的节点应用程序中再次进行testing。 这次(以及之后的所有尝试),我的查询返回了45条logging。 如果我把这个限制改为20,21或22,那么他们都会很好地回复–23个起始似乎会返回一个大于限制的数量。 奇怪的是,我可以在mongo CLI中运行这个查询,它将按照预期返回25条logging。 我想知道我是否在这里失去了一些东西? 如果有什么价值的话,下面是我collections的统计数据: > db.matches.stats(); { "ns" : "[database].matches", "count" : 3678, "size" : 910236192, "avgObjSize" : […]

mongoose数据范围查询不起作用

我有一个像这样的search方法。 (我也有很多其他代码做不同types的search,但为简单起见我省略了这些代码) var mongoose = require('mongoose'); exports.searchWithParams = function (modal, req, res, next) { console.log(JSON.stringify(req.body)); var body = req.body; var orConditions = []; var andConditions = []; for (var i = 0; i < body.searchParms.length; i++) { var param = body.searchParms[i]; switch (modType) { case 'and': andConditions.push(param); break; case 'or': orConditions.push(param); break; default : throw […]

使用$ group阶段和$ sum运算符进行聚合

我想使用聚合和小组阶段来总和所有“总计”字段值。 我的代码和文件在这里 文件 { "_id": "57a068477b2l51ec16eb7das", "userID":"5742c6eedsaadsd93573e", "profileID":"5742aee49adv520593573c", "date": 1470130247779, "updateDate": 1470130361342, "total": 2 } { "_id": "57a068477b2l51ec16eb983", "userID":"5742c6eedsaadsd93573e", "profileID":"5742aee49adv520593573c", "date": 1470130247779, "updateDate": 1470130361342, "total": 1 } 我正在做下面的查询获取“总”值的总和 RecallProfile.aggregate([ { "$match": { "updateDate": { "$gte": from, "$lte": to } } }, { $group: { "_id": "$updateDate", "totalRecord": {"$sum": "$total"} } } ], function (err, result) […]

所有字段search

这是我的数据集,这是一个更大的json代码的一部分。 我想写一个查询,它将匹配价值链内的所有领域。 数据集: "value_chain" : { "category" : "Source, Make & Deliver", "hpe_level0" : "gift Chain Planning", "hpe_level1" : "nodemand to Plan", "hpe_level2" : "nodemand Planning", "hpe_level3" : "nodemand Sensing" }, 例: 如果有人search“礼物”,查询应扫描所有字段,如果匹配,则返回文档。 这是我尝试的,但没有工作 db.sw_api.find({ value_chain: { $elemMatch: { "Source, Make & Deliver" } } })

给定相同的查询,node-mongo-native和mongo-shell返回不同的结果

鉴于下一个代码: var daysToBeOld = 7; var dateOlder = moment().subtract(daysToBeOld, 'days').toDate(); MongoClient.connect(mongouri, function(err, db) { console.log('Filtering pending topics before: %s', dateOlder); var conditions = {status: 'pending', updated: {$lt: dateOlder}}; console.log('Using the next filters: %j', conditions); var topicsCol = db.collection('topics'); topicsCol.find(conditions).toArray(function (err, topics) { if (err) { console.log(err); } console.log("found %j topics", topics); callback(err, topics); }); }); […]

mongodb删除文件,如果在一个单一的查询$拉后数组为零

我有一个要求,我的comments模式如下所示 { "_id": 1, "comments": [ { "userId": "123", "comment": "nice" }, { "userId": "124", "comment": "super"} ] } 我想根据userId字段来拉取元素。 我正在做下面的查询 comments.update({},{$pull:{comments:{userId:"123"}}}) 我的要求是,如果数组长度变为零后拉运算符,我需要删除整个文档由于某种原因。是否有一个去一个单一的查询做到这一点? PS:我使用的是mongodb驱动。不是mongoose

Mongodb小组从总体方面总结两个类似数据的数组

我正在运行针对不同级别的社交数据的查询,并得到了一些相当大的聚合pipe道,然后在$ facet内运行。 $ facet部分的结果出来了两个数组然后我想合并。 例如。 { "first": [ { "_id": { "name": "one", "_id": "1" }, "date": [ "2017-09-07T00:00:00.000Z" ], "data": [ 1000 ] }, { "_id": { "name": "two", "_id": "2" }, "date": [ "2017-09-07T00:00:00.000Z" ], "data": [ 2000 ] } ], "second": [ { "_id": { "name": "1", "_id": "one" }, "date": [ […]

如何在过滤数组时包含空数组

这是我的物品模型。 const itemSchema = new Schema({ name: String, category: String, occupied: [Number], active: { type: Boolean, default: true }, }); 我想过滤“占用”arrays。 所以我使用聚合和放松'占领'领域。 所以我适用匹配查询。 并由_id分组。 但是如果过滤的“占用”数组是空的,则该项目消失。 这是我的代码 Item.aggregate([ { $match: { active: true }}, { $unwind: "$occupied", }, { $match: { $and: [ { occupied: { $gte: 100 }}, { occupied: { $lt: 200 }} ]}}, […]

在mongoDB中使用sailsselect满足条件的特定字段

我有一个mongoDB集合和JSON的样子 [{ class : "I", subject : "Maths", students: [{ name : "John", roll_no : "1001", marks : "65", is_passed : "true" }, { name : "Leo", roll_no : "1002", marks : "48", is_passed : "false" }] }] 我能够使用命令获取数据 My_Table_Name.find({}, {fields:{ 'class' : 1, 'students':1 } }) .populate('students',{ select : ['name', 'is_passed'] }) 由此我可以得到的输出 [{ […]