Sacar solo la información de un idioma con Mongoose

tengo un Backend realizado con Node.JS y ExpressJS y como base de datos estoy usando MongoDB con Mongoose y esta es la estructura de la colección de categorías.

{     "_id" : ObjectId("5d712d3b707d601fe0147730"),     "name" : {         "es" : "Aspiración",         "en" : "Aspiration"     },     "slug" : {         "es" : "aspiracion",         "es" : "aspiration"     },     "description" : {         "es" : "La mayor potencia.",         "es" : "The greatest power."     }, } 

En cada String se puede guardar en Ingles y en Español pero cuando hago un Category.find() quiero pasarle el idioma por ejemplo “es” y que solo me devuelva los String en el idioma seleccionado por ejemplo de esta manera seria el resultado que devolveria.

{     "category": [         {             "_id": "5d712d3b707d601fe0147730",             "name": "Aspiración",             "slug": "aspiracion",             "description": "El mas potente."         }     ] } 

Esta seria mi función para buscar categorías.

function getAllCategories(req, res) {   const lang = "es";    Category.find().exec((err, categoryStored) => {     if (err) {       res.status(500).send({ message: "Error del servidor." });     } else {       if (!categoryStored) {         res           .status(404)           .send({ message: "No se ha encontrado ningun producto." });       } else {         res.status(200).send({ category: categoryStored });       }     }   }); } 

Espero que me podáis ayudar por quelo he intentado pero no he conseguir sacarlo.

Un saludo y muchas gracias.

mi mongoose es 5.6.10 ¿sigue funcionando mongoose.set() de la misma manera que la version 5.2.10?

Tengo una warning:

DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.

para la cual lei que en mongoose 5.2.10 debia agregar mongoose.set('useCreateIndex', true); donde hago la conexión a la base de datos, mi pregunta es si este mongoose.set() sigue funcionando de la misma forma para la version 5.6.10 yo solo estoy intentando desacerme del warning, pero realmente no se bien que es lo que hace mongoose.set('useCreateIndex', true); la warning desaparece pero en localhost:3900 me sale el mensaje Cannot GET /.

const winston = require('winston'); const mongoose = require('mongoose'); const config = require('config');  mongoose.set('useCreateIndex', true);  module.exports = function() {   const db = config.get('db');    mongoose.connect(db, {useNewUrlParser: true})     .then(() => winston.info(`Connected to $  {db}...`))     .catch(e => console.error(e)); }

Populate de un array de IDs anidada en mongoose

Tengo el modelos de los usuarios y el modelos de los post. En el modelo de los post, cuando un usuario hace like a un post, hago referencia a la id de ese usuario.

En el modelo de los user hago lo mismo, cuando el user da like a un post, añado la id del post al que le ha dado like.

Cuando se cargan los posts, necesito obtener la data de los usuarios que han dado like a ese post y he hecho lo siguiente:

Modelo user:

const userSchema = new Schema({  name: {     type: String,     required: [ true, 'El nombre es necesario' ] }, avatar: {     type: String,     default: `av-1.png` }, email: {     type: String,     unique: true,     required: [ true, 'El email es necesario' ] }, password: {     type: String,     required: [ true, 'La contraseña es necesaria' ] }, likes: [{     type: Schema.Types.ObjectId,//String      ref: 'Post' }]}); 

Modelo post:

const postSchema = new Schema({   created: {     type: Date }, message: {     type: String }, imgs: [{     type: String }], coords: {     type: String }, user: {     type: Schema.Types.ObjectId,     ref: 'User',     required: [ true, 'Debe existir una relación con un usuario' ] }, info: {     likes: {         number: {             type: Number         },         usersId: [{             type: Schema.Types.ObjectId,             ref: 'User'         }]     } }    }); 

Obtención de los post con los usuarios que han dado like populados:

const posts = await Post.find()                         .sort({_id: -1})                 // Orden descendente                         .skip( skip )                         .limit(10)                       // Maximo 10 por petición                         .populate('user', '-password')                         .populate( {                              path: 'metrics',                             populate: {                                 path: 'likes',                                 populate: {                                     path: 'userId',                                   }                                }                            } )  // Obtener datos user -pass                         .exec();   res.json({     ok: true,     page,     posts }); 

Error: (node:8216) UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value “{ usersId: [] }” at path “_id” for model “Post”

¿Como puedo hacer para obtener la data de todos los usuarios que hay en el array userId?

How can I structure the opening hours of some place in Mongoose?

I need to design a way for my database to be able to store different opening hours of a place, let’s say a bar or a restaurant. These opening hours can be different from day to day, and they need to work with hours such as 9:30 or 8:15, not only integers.

This is what I came up with:

opening_hours: {         normal_days: {             mon: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             tue: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             wed: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             thu: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             fri: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             sat: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },             sun: {                 start: { type: Number, min: 0, max: 23 },                 end: { type: Number, min: 0, max: 23 },             },         },         special_days: {             date: Date,             name: String,             start: { type: Number, min: 0, max: 23 },             end: { type: Number, min: 0, max: 23 },             is_closed: Boolean,         },     }, 

I can’t find a better way of doing it, unfortunately. What do you think would be an optimal schema for that problem?

Mongoose – Aggregation – Setar campo como valor

Não estou conseguindo fazer a query abaixo me retornar alguns campos como valores de outros campos

Ex.:

{  _id:'Javascript',  valorWd: valorPs_Label // wd = "based on" e ps_Label = "ecmascript"  }  Linguagem.aggregate(         [          //{$  match: {"isIdentifier": "false"}},         {"$  match": {             "linguagemLabel": "JavaScript"}         },         {"$  group": {              _id: "$  linguagemLabel",              wd: {$  addToSet: "$  wdLabel"},              ps: {$  addToSet: "$  ps_Label"},              wdpq: {$  addToSet: "$  wdpqLabel"},              pq: {$  addToSet: "$  pq_Label"},             }         },             {"$  project": {                 wd: 1,                 ps: 1,                 wdpq: 1,                 pq: 1,                 prop: 1               }         },         { $  sort : { _id : 1} }     ]).exec(function(err, ret){         if(err){console.log(err)}         console.log(ret)         return res.json(ret);     }); 

Agregar expresión regular para validar email en un modelo de mongoose

Estoy intentando agregar una expresión regular y forme parte de las validaciones de mongoose y mongoose-unique-validator sin embargo no encuentro la forma de agregarlo. Lo podría hacer con node pero me gustaría tener todo centralizado. Quiero agregar una expresión regular de correo electrónico. Este es mi modelo

import mongos from 'mongoose' import validator from 'mongoose-unique-validator'   const schema = new mongos.Schema({      personal_data: {         name: {              type      : String,              required  : [ true, 'El nombre es necesario' ],              maxlength : [ 50, 'El nombre no puede exceder los 50 caracteres'],             minlength : [ 3, 'El nombre debe contener 3 o más caracteres']          },         last_name:  {              type      : String,              required  : [ true, 'El apellido es necesario' ],              maxlength : [ 100, 'El apellido no puede exceder los 50 caracteres'],             minlength : [ 3, 'El apellido debe contener 3 o más caracteres'],         },         user_name:  {              type: String,              unique    : [ true, 'El usuario está duplicado' ],              required  : [ true, 'El usuario es necesario' ],              maxlength : [ 25, 'El usuario no puede exceder los 25 caracteres'] },         email: {              type      : String,              unique    : [ true, 'El correo está duplicado'],              required  : [ true, 'El correo es necesario' ],              maxlength : [ 100, 'El correo no puede exceder los 100 caracteres'] },         gender:     { type: Number, maxlength: 1 }     },      company_data: {         role          : { type: mongos.Schema.Types.ObjectId, ref: 'Role' },         area          : { type: mongos.Schema.Types.ObjectId, ref: 'Area'  },         permissions: [{             module: { type: mongos.Schema.Types.ObjectId, ref: 'Module' },             chmod:  { type: String, min: 1, max: 5, default: 'r' }         }]      },     engine_data: {         password:   { type: String },         last_login: { type: Date },         addedBy:   { type: String },         addedDate: { type: Date, default: Date.now },         modification  : [{             _id       : false,             user      : { type: mongos.Types.ObjectId, ref: 'User' },             date      : { type: Date, default: Date.now },             updated   : { type: Array }         }]     } }, { collection: 'users' })  schema.plugin( validator, {  message: 'Ya existe el correo o ID {VALUE} en la base de datos' } )  const UserModel = mongos.model('User', schema )  export default UserModel 

me imagino algo así

email: {              type      : String,              unique    : [ true, 'El correo está duplicado'],              required  : [ true, 'El correo es necesario' ],              maxlength : [ 100, 'El correo no puede exceder los 100 caracteres'],             regex     : function( value ) {               var re = /^(([^<>()\[\]\.,;:\s@"]+(\.[^<>()\[\]\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$  /;               return re.test(String(value).toLowerCase());             }  }, 

No tengo idea de hecho si está en la capabilidad de mongoose

Agradezco toda ayuda

Inserir valor no array mongoose

Minha model funciona da seguinte forma. Um usuário possui documentos, mas o usuário se cadastra antes de ter esses documentos. O que basicamente estou tentando fazer é dar um Update em usuários no array de documentos. SCHEMA

'user strict';  const mongoose = require('mongoose'); const Schema = mongoose.Schema;  const schema = new Schema({     email: {         type: String,         required: true     },     password: {         type: String,         required: true     },     name: {         type: String,         required: true     },     documents: [         {         title: {             type: String         },         content: {             type: String         },         notes: [             {             note: {             type: String             }         }     ]     } ]  });  module.exports = mongoose.model('User', schema); 

Então busquei algumas possíveis respostas e cheguei a isto QUERY

exports.put = (req, res, next) => {     const id = req.params.id;     User     .update({id}, {         $  push: {             "documents.$  .title": req.body.title,             "documents.$  .content": req.body.content         }     }).then(x => {         res.status(200).send({             message: 'Usuário atualizado com sucesso!'         });     }).catch(e => {         res.status(400).send({             message: 'Falha ao atualizar o Usuário =(', data: e         });     });   }; 

Ele não retorna erro, cai no THEN e dá como se o usuário tivesse sido atualizado com sucesso. Alguém poderia me ajudar?

Mongoose save method saves multiple times same document

Hi I have one input field date selector on angular UI. I select the date from field and update the starting Date and till there it works correctly. but If I select the date again it duplicates the document instead of updating it.

working code:

router.post('/request/waiting/:startingDate', (req, res) => {   const waiting = new WaitingRequest({     startingDate: req.params.startingDate,     requestID: req.body.requestID,     contactInformation: req.body.contactInformation,     orderInformation: req.body.orderInformation,     requestInformation: req.body.requestInformation,     installations: req.body.installations   });   waiting.save().then(result => {     return res.status(201).json({       message: 'Updated and Saved /waiting',       result: result     });   }); }); 

Toda vez que inicio um servidor o mongoose faz uma conexão desnecessária ao banco de dados

Boa noite pessoal!

Estou iniciando na área e como primeiro objetivo resolvi criar um e-commerce simples, só que toda vez que inicio meu servidor, ele executa uma conexão ao banco de dados de forma desnecessária, fiquei com a pulga atrás da orelha, pois afinal, isso seria seguro? Não tenho que fechar a conexão toda vez que fizer uma consulta ou algo do tipo?

Se alguém puder me explicar esses conceitos e tals, segue meu código

Coloquei um console.log para exibir a mensagem

Abaixo segue o trecho onde faço a conexão, o que queria saber seria mais um conceito mesmo, para não cometer erros bobos no futuro, pode até ser que a minha pergunta não faça muito sentido para o pessoal experiente

mongoose.Promise = global.Promise; mongoose.connect('mongodb://localhost/didixo', {useNewUrlParser: true}).then(function(){   console.log("Conectado a base de dados") }).catch(function(err){   console.log("Erro ao conectar a base de dados: " + err) })
https://pt.stackoverflow.com/questions/ask#

29″ Mongoose XR-PRO

As you can see I asked about this before and received this answer. But it does’n actually answer my question. So I ask again.

A fellow customer answered your question, “For what weight is rated? ” the bear answered: “Not sure of the exact weight limit, but my husband rode it and he’s about 230 lbs. Make sure you keep the tires inflated to the correct psi, that makes a difference too. Hope this helps.”

Thanks fellow Amazon customer but an equipment can be rated for let say 300 pounds or less and be used a few times with a load of 500 pounds or more, it might not brake but it just might. When it comes to a vehicle it could be very dangerous even if it is a bicycle been ridden on a nice even grassy plane. I’m pretty sure this particular bike can be used by me on a day to day basis, specially in the conditions I’m gonna use it but I just wanna be safe. Mainly if I have to let someone else ride it. Once again Thanks.