Articles of mongodb

将Bson转换为Json对象

Crome开发人员工具显示这一点 console.log('DATA ***',data [0] ._ id); DATA *** Object {_bsontype:“ObjectID”,id:“YIä↵P¨H0”} 我怎样才能将其转换成正常的JSON对象?

根据req参数dynamic添加字段到mongoose聚合

我正在build立一个API,其中可以指定3个input参数,例如: /trips/:id/:from/:to 。 我特别感兴趣的参数是from和to 。 在我的mongoDB集合中,我有如下的结构: id 2014_08 2014_09 … 1 […] […] 2 […] […] 现在我想在下面的聚合中实现,就是根据从中调用的内容和to ,它应该返回相应的字段。 例如: GET /trips/1/2014_08/2014_09应返回: id: 1, 2014_08: { … }, 2014_09: { … } 我的路线如下所示: app.get('/trips/:id/:from/:to', function(req,res) { var aggr = Trip.aggregate([ { "$match": { "_id": Number(req.params.id) } },{ "$project": { "_id" : 1, "trips_201408": "$2014_08", //How to […]

在MongoDB中返回具有不同字段和1select查询的整个文档

我有困难编写一个查询,返回整个文档,同时仍然有1个不同的领域。 我已经试图混乱总结,但无济于事。 googlesearch了一段时间之后我已经find了这个文件: 如何有效地执行多个键“独特”? 它描述了我需要的大部分解决scheme,但是我还需要在另一个领域进行筛选。 这是我现在用来查询TempCollection中文档的sorting列表的function。 function getLatestUserData(UserID, callback) { console.log("in func " + UserID); Temp.find({ UId: UserID }).sort({ "created_at" : -1 }).exec( function (err, data) { console.log(data + " " + err); callback(data); }); }; 然而,我无法弄清楚如何在同一时间过滤,分类和清除所有的东西。 这是使用Aggregates的一个尝试,然而,阅读文章已经有相当长的一段时间了,我只是无法弄清楚我需要的语法: function getLatestUserData(UserID, callback) { Temp.aggregate([ {"$group": { "_id": { value: "$value", SerialNumber: "$SerialNumber" } }}, {$filter : […]

快速 – multer fileFiltererror handling

我尝试上传一个文件,上传就OK了! 问题是,当我尝试上传一些不被我接受的文件fileFitler处理。 我想在控制台收到一些错误或将用户redirect到后台页面,但我只是在浏览器上收到错误:无法读取未定义的读取属性文件名。 但是,如果我上传一些被接受的扩展,就行了! 这是我的代码: const mongoose = require('mongoose'); const multer = require('multer'); const uuidV4 = require('uuid/v4'); const Video = require('../models/videoModel'); function fileFilter(req, file, cb){ const extension = file.mimetype.split('/')[0]; if(extension !== 'video'){ return cb(null, false), new Error('Something went wrong'); } cb(null, true); }; var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads') […]

如何用node.js中的monk更新mongodb中的嵌套字段

我正在用新logging更新我的mongodb数据库。 数据库由数组组成的练习字段组成,当我做一个PUT头时,我想用新logging更新具体练习,而不是覆盖特定练习的整个领域,因为我想保留进度的历史logging。 到目前为止,我只能得到在router.get('/:昵称/:info')中看到的特定的嵌套字段,我们可以在其中指定用户及其名称,年龄或性别。 我可以在练习场上做同样的事情,但我一直没有更新这些。 这是数据库: [ { "_id": "59283956c52a5420e74966b9", "info": { "nickname": "annwumy", "name": "Bert", "gender": "male", "age": 25 }, "exercises": [ { "exercise": { "name": "squats", "records": [] } }, { "exercise": { "name": "legpresses", "records": [] } }, { "exercise": { "name": "deadlifts", "records": [] } }, { "exercise": { "name": "benchpresses", "records": […]

Mongoose更新查询不断更新插入数据,而不需要更新,只添加1个字段

我正在使用Mongoose在Facebook上loginNode js。 我正在更新数据时遇到问题。 这是我的Scheme文件 var mongoose = require('mongoose'); var Schema = mongoose.Schema; // Schema var RegSchema = mongoose.Schema({ UserName: String, UserEmail: String, userprofileImage : String, userId: String, reg_time : { type : Date, default: Date.now } }, { collection: 'user' }); // Model module.exports = mongoose.model('UserReg', RegSchema); 这是我的主要文件更新和插入(如果没有find)被放置 var express = require('express'); var mongoose = […]

Mongooseencryption中间件在聚合之后不会调用

我有一个带有“mongoose–encryption”插件的mongoose模式,例如: let someSchema = new Schema({name, age}); someSchema.plugin(mongoose-encryption, { encryptionKey: 'eKey', signingKey: 'sKey', encryptedFields: ['age'], decryptPostSave: false }); 启动模型和存储库后,我尝试聚合一些查询: let aggregation = []; // just return all the docs. someModel.aggregate(aggregation, (err, persons) => { return persons; }); 因此,我仍然得到encryption的年龄字段,很less有人读到“聚合之后”调用“init”事件的'post'方法(如这里所解释的 – Mongoose Middleware Docs )。 有没有一个好的解决scheme? 或任何其他解决方法? 数据必须encryption。 聚合也是必需的(在现实生活中 – 查找其他collections)

用EJS迭代mongoose对象

当我把<%= products %>放到我的视图中时,它会打印[Object Object],所以我假定mongoose结果集是一个对象。 现在,我试图循环products对象,但它说products.forEach is not a function 。 这是我的index route : var express = require('express'); var router = express.Router(); var Product = require('../model/product'); /* GET home page. */ router.get('/', function(req, res, next) { var products = Product.find(); res.render('index', { title: 'Express', products: products }); }); module.exports = router; 与上面的代码,我只是从数据库检索它并将其作为一个对象传递。 我已经尝试使用var products = Product.find({}).toArray(); […]

检查多个Mongoose集合中特定字段的总和

我正在尝试为餐厅预订mongoose模式,但如果所有collections中的“人物”价值超过50,我不希望人们能够预订。 var reservationSchema = new mongoose.Schema ({ people: Number, date: String, name: String, email: String }); var Reservation = mongoose.model("Reservation", reservationSchema); app.post('/reservation', (req, res) => { var people = parseFloat(req.body.people); var date = req.body.date; var name = req.body.name; var email = req.body.email; var newReservation = {people: people, date: date, name: name, email: email}; Reservation.create(newReservation, (err, […]

如何validationMongoose模式中的对象键和值?

在我的Mongoose模式,我试图模拟字典offersInCategory看起来像这样: offersInCategory = { "Electronics": 2, "Furniture": 5 }; Mongoose不支持字典,所以我不得不在数组中使用对象字面值,如下所示: offersInCategory: [{ category: { type: String, enum: ['Furniture', 'Household', 'Electronicts', 'Other'] }, val: { type: Number, min: 0 } }] 我用这种方法的问题是感觉不直观。 此外,它并不妨碍我的模型为同一类别创build多个条目,如下所示: offersInCategory = [ { category: "Furniture", val: 2 }, { category: "Furniture", val: 0} ] 理想情况下,我会把我的offersInCategory属性的结构像这样: offersInCategory : { "Furniture" : 0, "Electronics" […]