Как преобразовать из new ObjectId() в строку в Mongodb?

#node.js #mongodb #objectid

Вопрос:

Ниже приведен мой код для создания отзыва и добавления его в мой массив отзывов о коллекциях ресторанов, я также показываю этот отзыв после добавления его в коллекцию.

 const res = require('./restaurants'); async create (restaurantId, title, reviewer, rating, dateOfReview, review) {     // check(restaurantId, title, reviewer, rating, dateOfReview, review)  restaurantId = ObjectId(restaurantId)  const restaurantsCollection = await restaurants();  let newReview = {  _id: ObjectId(),  title : title,  reviewer : reviewer,  rating : rating,  dateOfReview : dateOfReview,  review : review  };        await restaurantsCollection.updateOne({ _id : restaurantId},{ $push: {reviews: newReview} })    const r = await restaurantsCollection.findOne({ _id: restaurantId });  let len = r.reviews.length    r.overallRating  = rating    let avg = r.overallRating/len    /* await restaurantsCollection.updateOne(  { "r.overallRating": r.overallRating },  { $set: { "r.$.overallRating" : avg } }  ) */  var query = { _id : restaurantId };  var data = { $set : {overallRating : avg} } ;  await restaurantsCollection.updateOne(  query,data  );    restaurantId = restaurantId.toString().replace(/ObjectId("(.*)")/, "$1");  return res.get(restaurantId)      },  

restaurant.js:

 async get(id) {  if (!id) throw 'You must provide an id to search for';  checkString(id);  var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");  if(checkForHexRegExp.test(id)===false) throw 'Not a valid objectid';  id = ObjectId(id);  const restaurantsCollection = await restaurants();  const res= await restaurantsCollection.findOne({ _id: id });  if (res === null) throw 'No restaurant with that id';  res._id = res._id.toString().replace(/ObjectId("(.*)")/, "$1");  return res;  },  

Результат, который я получаю, таков:

 {  _id: '6174cf81053daf4b9937ef80',  name: 'Saffron Lounge',  location: 'SoHo, New York',  phoneNumber: '123-456-1234',  website: 'http://www.thesaffronlounge.com',  priceRange: '$

Как я могу изменить поле _id, чтобы в нем не было нового объекта и просто отображалась строка, я пытался добавить JSON.stringify() в возвращаемый результат, но он не возвращает его как объект, также я пытался использовать:

 toString().replace(/ObjectId("(.*)")/, "$1");  

Но это не работает для обзоров, так как я создаю новый объект() в функции создания, и я не знаю, где это правильно добавить, есть ли более простой способ отображения:

 _id: "6174cfb953edbe9dc5054f9a"  

Ответ №1:

Вам просто нужно запросить функцию ObjectId у вашего mongo.

 ObjectId = require('mongodb').ObjectID;  

Тогда вы можете использовать его вот так:

 ObjectId("34234234234234234234")  

Комментарии:

1. Где я могу это отобразить, так как отзывы не являются коллекцией, и я возвращаю данные из коллекции ресторанов

2. Я тоже попробовал это, не получилось: ожидание restaurantsCollection.updateOne({ _id : ObjectId(restaurantId). toString()},{ $push: {отзывы: newReview} })

Ответ №2:

Добавление приведенного ниже кода сработало для меня:

 for(i=0;ilt;a.reviews.length;i  ){  a.reviews[i]._id = a.reviews[i]._id.toString().replace(/ObjectId("(.*)")/, "$1");  }   

, cuisines: [ 'Italian' ], overallRating: 0.13518518518518519, serviceOptions: { dineIn: false, takeOut: false, delivery: true }, reviews: [ { _id: new ObjectId("6174cfb953edbe9dc5054f9a"), title: 'bo', reviewer: 'dd', rating: 2, dateOfReview: '15/1/2002', review: ' ruh' }, Как я могу изменить поле _id, чтобы в нем не было нового объекта и просто отображалась строка, я пытался добавить JSON.stringify() в возвращаемый результат, но он не возвращает его как объект, также я пытался использовать:


Но это не работает для обзоров, так как я создаю новый объект() в функции создания, и я не знаю, где это правильно добавить, есть ли более простой способ отображения:


Ответ №1:

Вам просто нужно запросить функцию ObjectId у вашего mongo.


Тогда вы можете использовать его вот так:


Комментарии:

1. Где я могу это отобразить, так как отзывы не являются коллекцией, и я возвращаю данные из коллекции ресторанов

2. Я тоже попробовал это, не получилось: ожидание restaurantsCollection.updateOne({ _id : ObjectId(restaurantId). toString()},{ $push: {отзывы: newReview} })

Ответ №2:

Добавление приведенного ниже кода сработало для меня: