Tag: mongodb

NodeJS&MongoDB – 基于ID数组获取对象

我遇到麻烦返回基于ObjectIds数组获取对象。 我收集了10个项目。 例如,在iOS应用程序中,我传递了一个用户已经保存为collections夹的ObjectIds数组,以返回collections夹选项卡中的这两个对象, ["59f85eae4545XXX9b94d53d3", "59f85eae45454XXXb94d76a1"] 现在,我刚刚使用NodeJS对请求顶部的ObjectId进行了硬编码,直到我请求工作,下面是请求 – exports.list_favs = function(req, res) { Articles.find({ _id: { $in: [ mongoose.Types.ObjectId('59f85aXXXXf1769b94d53ce'), mongoose.Types.ObjectId('59f85eaeXXXX1769b94d53d3') ]} }, function(err, articles) { if (err) res.send(err); res.json({ data: { articles } }); }); }; 而我甚至试过这个 – exports.list_favs = function(req, res) { var ids = new Array( new ObjectId("59f85eaeXXXX1769b94d53d3"), new ObjectId("59f85aXXXXf1769b94d53ce") ); Articles.find({ _id: { […]

findOneAndUpdatemongoose需要太长的'唯一'20kasynchronous更新

我需要从Google表格中读取一个csv文件并更新一个mongodb数据库。 该表具有20k到25k行(每个大约30列)。 如果我将表的读取限制在10K行以下,我设法做得很好,但是如果我超越它,开始行为怪异并需要很长时间才能最终运行所有asynchronousFindOneAndUpdates。 这里是我正在使用的代码(我应该做的时候,我创build了一个callback到console.log的计数器): const mongooseDeals = require('mongoose'); const dotenv = require('dotenv'); dotenv.load(); const googleAuth = require('./gAuth'); mongooseDeals.connect(process.env.MONGODB_URI_DEALS, { useMongoClient: true, socketTimeoutMS: 0, reconnectTries: 30 }); const fs = require('fs'); const readline = require('readline'); const google = require('googleapis'); //Models const Deals = require('./api/models/deals'); googleAuth.authorize() .then(readDeals) .catch((err) => { console.log('auth error', err); }); function readDeals(auth) { […]

mongoose嵌套模型与子文档(按性能)

我需要开发一个新的webapp(带有MEAN堆栈)。 我以前只开发过一对。 我需要存储设备(如100K文件)。 每个设备将有+1百万的读数。 每次我访问的读数列表,我将不得不过滤内容(通过特定的领域),并得到像1Klogging最大。 我不知道devise应该是什么样子,寻找最佳的performance。 我有三个select: Option1,使用子文档: var deviceSchema = new mongoose.Schema({ device_id: Number, serialNumber: String, readings:[{ timestamp: Date, lat: Number, long: Number, otherfield1: String, … }] },{ timestamps: true, strict: false }); 注意:我只访问DB一次; 我访问这个设备,我已经阅读了所有的文档,但是这个文档将会很大。 Option2,独立collections: var deviceSchema = new mongoose.Schema({ device_id: Number, serialNumber: String },{ timestamps: true, strict: false }); var readingSchema = […]

$拉在MongoDb中没有按预期工作

我有一个数组,我试图删除基于_id的数据,但部分数据正在被拔出和NULL值填充,而不是。 排列 vehicle : [ { data :{ _id:"adkabd", "type":"ffff" }, "_id":"amklam", "history":[], "addedon":"date" }, { data :{ _id:"adkcbbd", "type":"ffff" }, "_id":"amklam", "history":[], "addedon":"date" }] 现在我想提取这些数据 { data :{ _id:"adkabd", "type":"ffff" }, "_id":"amklam", "history":[], "addedon":"date" } 完全基于_id:"adkabd" 更新的命令: async.series( [ function(callback) { Models.DispatchOrder.update({'vehicle.data._id': criteria._id}, {$unset:{'vehicle.$':""}}, callback() ); }, function(callback){ Models.DispatchOrder.update( {'vehicle': null}, {$pull: {'vehicle':null}}, callback() […]

如何在MongoDB中添加2个引用到单个模型?

我正在开发一个博客网站(如中等),其中将有一个用户模型,博客模型和类别模型。 基本思想是将用户存储在用户数据库中,博客数据库中的所有博客和类别数据库中包含可以发布的不同types的博客。 我想在BlogDB中存储用户(谁发布了博客)的参考和博客的类别。 我所做的模式如下 – 博客架构 – var blogSchema = new mongoose.Schema({ title: String, content: String, image: String, createdAt: Date, blogCategory : { id: { type : mongoose.Schema.Types.ObjectId, ref : "Category" } }, author: { id: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, username: String }}); 用户架构 – var UserSchema = new mongoose.Schema({ firstname: String, lastname: […]

mongodb使用mongoose:E11000重复密钥错误.save与嵌套集合

我试图创build一个项目项,它有一个我想描述为一个语言数组 语言可以(将)最初是空的,并且其中的每个对象都必须有一个被称为key的字段,它必须是唯一的。 例如: { languages: [], …. } 要么: { languages: [ { key: 'en-US } ], … } mongoose模式看起来像: { languages: [{ key: { type: String, unique: true, }, }], … } 第一个创作作品: const project = new Project({ name, owner: user, }); await project.save(); 然而,此后,我得到这个错误已经有一个关键的语言:null,即使语言数组是空的… { MongoError: E11000 duplicate key error collection: yebu.projects index: […]

Node.js:用Mongoose更新文档

我正尝试在受邀用户注册时更新邀请。 邀请有一个auth属性,它是一个嵌套的对象,它本身有一个“使用”键的属性。 我只是试图显式声明的值为真,并保存,使用asynchronous/等待。 但它不是更新。 有一个更好的方法吗? 我的function: exports.invitedSignup = async (req, res, next) => { const { firstName, lastName, company, password, email, companyCode, token } = req.body; console.log(email); try { const user = await User.findOne({ email }); const invitation = await Invitation.findOne({ email }).sort({ field: 'asc', _id: -1 }).limit(1); if (user) { return res.status(422).send({ error: "User […]

一个查询,find每个孩子与一个裁判

今天我面临一个问题。 我使用快速,mongodb与mongoose来处理我的应用程序的后端。 我有一个ObjectId引用给他的父母的模型。 我想检索包含此父项的每个文档。 但我只收到父母的名字,而不是ID。 唯一的解决scheme,我发现是做第一个查询来findid,然后再找一个文件。 我想知道是否有可能在一个查询中做到这一点? 我的模特: const childSchema = new Schema({ name: { type: String, required: true }, _exampleParent: { type: Schema.Types.ObjectId, ref: 'parents', } }); 我的查询: Parent.findOne({name:req.query.parent}, function(err, values){ if(err) return next(err); Child.find({_exampleParent:values.id}, 'name', function(err, values){ if(err) return next(err); res.send(values); } ); }); 多谢你们 !

不要工作/保存数据

我想这样做,当用户点击一个checkbox,该值是真实的,但是当他们离开它取消选中它将变为假。 我想要它,所以他们默认为true。 我有以下作为我的用户模型的一部分。 我的用户模型的一部分: newsletterEmail: { type: Boolean, default: 'true'}, lowerLimitEmail: { type: Boolean, default: 'true'}, featuresEmail: { type: Boolean, default: 'true'}, assetOut180: { type: Boolean, default: 'true'}, lowerLimit: { type: Boolean, default: 'true'}, 我有这个checkbox的HTML是: <div class="form-check"> <label class="form-check-label"> <input class="form-check-input" name="newsletterEmail" type="checkbox" value="true"> Newsletter notifications </label> </div> 然后在我的路线我有这个查询: User.findById(req.user.id, function(err, user) { if (err) […]

mongoose:填写一个歧视的子文件

我想填充子文档的字段,这是一个常见模式( Notificationable分为Message或FriendRequest )的区分元素。 这个问题与这个问题非常相似: mongoosejs:从两个不同的模式中填充一个objectId数组 ,这是两年前没有解决的。 由于mongoose进化了,鉴别者也是,我再次提出这个问题。 我到目前为止所尝试的: Notification.find({_id: 'whatever'}) .populate({ path: 'payload', match: {type: 'Message'}, populate: ['author', 'messageThread'] }) .populate({ path: 'payload', match: {type: 'FriendRequest'}, populate: ['to', 'from'] }) .exec(); 这是行不通的,因为path是一样的。 所以我试了一下: Notification.find({_id: 'whatever'}) .populate({ path: 'payload', populate: [ { path: 'messageThread', match: {type: 'Message'}, }, { path: 'author', match: {type: 'Message'}, }, { […]