【问题标题】:How do I a display an array value based on a search id in mongoDB?如何根据 mongoDB 中的搜索 id 显示数组值?
【发布时间】:2021-12-09 13:20:21
【问题描述】:

下面是我从餐厅对象中的评论数组中查找评论并在 _id 匹配时显示评论的代码:

餐厅对象:

{
  _id: new ObjectId("61723c7378b6d3a5a02d908e"),
  name: 'The Blue Hotel',
  location: 'Noon city, New York',
  phoneNumber: '122-536-7890',
  website: 'http://www.bluehotel.com',
  priceRange: '$$$',
  cuisines: [ 'Mexican', 'Italian' ],
  overallRating: 0,
  serviceOptions: { dineIn: true, takeOut: true, delivery: true },
  reviews: [
    {
      _id: new ObjectId("61736a0f65b9931b9e428790"),
      title: 'dom',
      reviewer: 'firuu',
      rating: 4,
      dateOfReview: '25/1/2002',
      review: ' bruh'
    }
  ]
}

 async get(reviewId) {

    const restaurantsCollection = await restaurants();
    reviewId = ObjectId(reviewId)
    const r = await restaurantsCollection.find({reviews: {$elemMatch: {_id: reviewId}}})
    return r
    
  },

index.js:

a = await reviews.get("61736a0f65b9931b9e428790")
console.log(a)

我得到的输出是:

FindCursor {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  [Symbol(kCapture)]: false,
  [Symbol(topology)]: Topology {

更多,因为我在某处缺少一些功能。

如何根据评论 ID 作为输入获得返回评论的输出?

【问题讨论】:

  • 什么等待餐厅();回归?
  • 我想,您的查询不正确?你的意思是 findone 而不是 find ?其中findone 返回实际值,find 返回FindCursor 有一个方法叫做toArray()?试试r.toArray()
  • @Ayzrian,也许await restaurants(); 会返回一个集合。
  • @Ayzrian restaurant() 返回一个集合
  • @Nur 它说 r.toArray 不是函数

标签: node.js arrays mongodb async-await objectid


【解决方案1】:

“它说r.toArray 不是函数” - 你告诉我们你有一个查找光标,确实FindCursor 有一个名为toArray 的方法。

method/cursor.toArray/

find() 方法返回一个管理查询结果的 FindCursor。您可以使用以下游标方法之一遍历匹配的文档:

  • 下一个()
  • toArray()
  • forEach()

有很多方法可以迭代光标,

使用异步迭代器:

for await (let doc of collection.find({})) {
   console.log(doc);
}

toArray

 let docs = await collection.find({}).toArray();

还有更多!他们支持回调,节点流api等......但这两种方法是现代的。

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2017-02-03
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多