Articles of mongoose

Mongoose更新文档或插入新文档如果没有findID(Express REST API)

我已经build立了一个Express REST Api,并且想实现一个检查某个对象ID是否存在的任务。 如果该ID存在于Mongo数据库中,我想使用Put请求来更新这个文档。 这部分已经在我的代码中工作。 如果ID尚不存在于数据库中,我想创build一个新的文档。 要做到这一点,我试图将“upsert”选项设置为true,但是,如果我现在做一个ID的放入请求,这是不是在我的数据库,但它回来的错误: throw er; // Unhandled 'error' event ^ CastError: Cast to ObjectId failed for value "34455ab67" at path "_id" for model "event" 这里是我的事件模型代码: var mongoose = require('mongoose'); var eventSchema = mongoose.Schema({ name: { type: String, required: true } }); var Events = module.exports = mongoose.model('event', eventSchema, 'event'); module.exports.updateEvent = […]

你应该发送DB错误给用户吗?

在我写的NodeJS / MongoDB服务器中,我有很多的API调用来存储用户和数据库中的内容。 Mongoose已经调用了MongoDB,在查询之后,它将返回一个带有错误(如果有的话)和一个文档(如果有一个返回的)的callback函数。 我想知道如果我应该把错误发送给用户,扔它(停止整个服务器),或只发送500错误。 例: accountDocument.save(function (err, account) { if (err){ res.status(500).json(err); // Option 1 – sends DB error to user res.status(500).end(); // Option 2 – just notifies there was a problem throw err; // Option 3 – stops the server completely } else res.status(200).json(account); }); 我应该select哪一个?

将$ geoNear与另一个集合结合

我有2个collections, resto和meal (每个餐文件有它所属的resto id)。 我想要取得至less有一顿饭的附近的restos 。 现在,我可以去附近的餐馆,但我怎样才能确保他们至less有一顿饭? restoModel.aggregate([{ "$geoNear": { "near": { "type": "Point", "coordinates": coordinates }, "minDistance": 0, "maxDistance": 1000, "distanceField": "distance", "spherical": true, "limit": 10 // fetch 10 restos at a time } }]); 示例resto文档: { _id: "100", location: { coordinates: [ -63, 42 ], type: "Point" }, name: "Burger King" } Sample […]

如何将对象数组保存在mongoose中并添加字段?

我正试图保存在一个数组下面… 我通过POST发送这个 req.body.products = {id: "5936460d2fabd233f0ddaca3", buy: 30, cant:20}, {id: "5936460d2fabd233f2ddace6", buy: 25, cant:14} 该id是现有产品的ObjectId 这是我的控制器 let facturaProv = new provBill({ id_store: res.locals.store.id, name: req.body.name, category: req.body.category, products : req.body.products }); facturaProv.save(function (err) { if (!err)res.send('OK') else res.send("error") } }); 这是我的模式 provSchema: new Schema({ id_store: { type: mongoose.Schema.Types.ObjectId, ref: 'store' }, category:String, name: String, products: […]

使用$或$ elemMatch和条件以外的数组

我的基本结构是我有一个会话对象的用户对象,其中包含一个subjectId和小时价格。 User{ defaultHourly: Number, subjects{ [ id: String, hourly: Number ] } } 我使用elemMatch像这样: query.elemMatch("subjects", { "id": { $in: subjects }, "$or": [ { "hourly": { $eq: null } }, // this is my issue { "$and": [ { "hourly": { $ne: null } }, { "hourly": { $gte: price.low, $lte: price.high } } ] […]

在json中返回多个来自查询的结果

有人可以告诉我怎么可以从这个查询,count()和产品列表中的一个结果? 因为在这一刻它只返回我有限的数组,我想所有产品的count()没有限制: 数组[对象,对象,对象,对象,对象] router.get('/products', function (req, res) { var size = parseInt(req.query.pageSize); if (req.query.pageNumber == 1) { var page = 0; } else { var page = parseInt(req.query.pageNumber) * req.query.pageSize – req.query.pageSize; } Product.count() .exec(function (err, products) { if (err) { res.status(404).json({ message: 'Can not download this list' }) } else { Product.find().skip(page).limit(size) .exec(function (err, […]

Mongoose model.find({})在使用mongoose4.11后无法工作;

Mongoose model.find({})在使用mongoose4.11后无法工作; 我注意到,更新到mongoose后,mongoose不能正常工作4.11,更新了一个警告显示在我的屏幕 DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead 所以我试了 let mongoConnectionLocal = { 'url': 'mongodb://username:password@localhost:27017/image-upload-gcs' }; mongoose.connect(mongoConnectionLocal.url, { auth:{authdb:"admin"}, useMongoClient: true}, err => { if(err) { console.log(err.stack); }}); 然后出现另一个警告 the options [auth] is not supported 所以我试了, mongoose.connect('mongodb://username:password@localhost:27017/image-upload-gcs?authSource=admin', { useMongoClient: true}, err => { if(err) { console.log(err.stack); }}); 现在mongoose不再工作,甚至不能使用model.find({})或创build一个文档 我试着恢复到mongoose4.10,一切正常。 […]

使用findOneAndUpdate $拉和填充不会更新或填充

这是我的数据: { "_id" : ObjectId("594e762b03cc52508686ceef"), "_members" : [ "59527bd5e521801bf07eab98", "594ecca47a699d1775c2a2db" ], } 我想从_members删除_members 。 PostSchema: const PostsSchema = new Schema({ // … _members: [{ type: Schema.Types.ObjectId, ref: 'user' }], // … }) UserSchema: const UserSchema = new Schema({ // … posts : [{ type: Schema.Types.ObjectId, ref: 'post' }], // … }) 查找和更新: let id = […]

从数组获取最新的子文档

我有一个数组。 我想从history 数组 (复数)中selectrevision号最高的对象。 我的文档看起来像这样(通常它不仅仅是uploaded_files一个对象): { "_id" : ObjectId("5935a41f12f3fac949a5f925"), "project_id" : 13, "updated_at" : ISODate("2017-07-02T22:11:43.426Z"), "created_at" : ISODate("2017-06-05T18:34:07.150Z"), "owner" : ObjectId("591eea4439e1ce33b47e73c3"), "name" : "Demo project", "uploaded_files" : [ { "history" : [ { "file" : ObjectId("59596f9fb6c89a031019bcae"), "revision" : 0 } ], "_id" : ObjectId("59596f9fb6c89a031019bcaf") "display_name" : "Example filename.txt" } ] } 我select文件的代码: function getProject(req, projectId) […]

如何分页在mongoose的_id数组?

目前,我有这种混乱,这是分层架构中的一系列项目。 所以在技术上,每个用户都有一个购物车,我想分类购物车的物品。 例如,假设购物车有18个物品存储。 我想将购物车分页到只有5个项目。 这是模式 const UserSchema = new Schema({ email: { type: String, unique: true, lowercase: true}, cart: [{ type: Schema.Types.ObjectId, ref: 'Product' }], }); 这是路线 我目前的做法 router.get('/cart', (req, res, next) => { User.findOne({ _id: req.user._id }) .populate({ path: 'cart', options: { limit: 5 } }) .exec((err, user) => { res.render('order/cart', { user: user […]