下面是我創建評論并將其添加到我的餐廳集合的評論陣列中的代碼,我也在將它添加到集合后顯示此評論。
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)
},
餐廳.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: '$$$',
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 欄位更改為沒有新的 ObjectID 并只顯示字串,我嘗試將 JSON.stringify() 添加到回傳結果但它沒有將其作為物件回傳,我也嘗試使用:
toString().replace(/ObjectId\("(.*)"\)/, "$1");
但它不適用于評論,因為我在 create 函式中創建了一個新的 Object() 并且我不知道在哪里正確添加它,是否有更簡單的顯示方法:
_id: "6174cfb953edbe9dc5054f9a"
uj5u.com熱心網友回復:
您只需要從您的 mongo 中要求 ObjectId 函式。
ObjectId = require('mongodb').ObjectID;
然后你可以這樣使用它:
ObjectId("34234234234234234234")
uj5u.com熱心網友回復:
添加以下代碼對我有用:
for(i=0;i<a.reviews.length;i ){
a.reviews[i]._id = a.reviews[i]._id.toString().replace(/ObjectId\("(.*)"\)/, "$1");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339366.html
