如何在 MongoDB 中只獲取數組元素而不是整個對像作為輸出?

游泳巴伊

下面是我的代碼,用於顯示作為餐廳集合對像一部分的評論數組數據:

async get(reviewId) {
    const restaurantsCollection = await restaurants();
    reviewId = ObjectId(reviewId)
  
    const r = await restaurantsCollection.findOne(
      { reviews: { $elemMatch: { _id : reviewId } } },
      {"projection" : { "reviews.$": true }}
    )
  
    return r
  }

我的對像看起來像:

{
  _id: '6176e58679a981181d94dfaf',
  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": "6174cfb953edbe9dc5054f99", // restaurant Id
    "reviews": [
        {
            "_id": "6176df77d4639898b0c155f0", // review Id
            "title": "This place was great!",
            "reviewer": "scaredycat",
            "rating": 5,
            "dateOfReview": "10/13/2021",
            "review": "This place was great! the staff is top notch and the food was delicious!  They really know how to treat their customers"
        }
    ]
}

我想要的輸出:

{
    "_id": "6176df77d4639898b0c155f0",
    "title": "This place was great!",
    "reviewer": "scaredycat",
    "rating": 5,
    "dateOfReview": "10/13/2021",
    "review": "This place was great! the staff is top notch and the food was delicious!  They really know how to treat their customers"
}

如何在不獲取餐廳 ID 或整個對象的情況下僅將輸出作為評論?

湯姆·斯拉巴特

所以查詢操作符,findfindOne不允許“高級”的數據重組。

所以你有兩個選擇:

  1. 更常見的方法是在代碼中執行此操作,通常人們要么使用某種東西mongoose post trigger要么使用某種“共享”函數來處理所有這些轉換,這就是避免代碼重複的方法。

  2. 使用聚合框架,如下所示:

const r = await restaurantsCollection.aggregate([
    {
        $match: { reviews: { $elemMatch: { _id : reviewId } } },
    },
    {
        $replaceRoot: {
            newRoot: {
                $arrayElemAt: [
                    {
                        $filter: {
                            input: "$reviews",
                            as: "review",
                            cond: {$eq: ["$$review._id", reviewId]}
                        }
                    },
                    0
                ]
            }
        }
    }
])
return r[0]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mongodb中更新数组元素

如何在mongodb中过滤数组元素

如何在對像數組中搜索一個值並在 Laravel 中獲取它?

在 NEXT.JS 和 MongoDB 中只返回單個對象而不是數組

如何在MongoDB聚合管道中將對像數組轉換為嵌套對象

如何在 Elasticsearch 中獲取數組字段的最後一個元素

使用聚合和查找 mongodb 從對像數組中獲取最小值

如何在MongoDB中獲取最近n個月的記錄(只考慮每月的最後一個條目)

如何在javascript中按日期範圍從對像數組中獲取唯一數據

如何在Javascript中循環沒有索引的對像數組作為字段?

如何在mongodb的數組中合併具有相同鍵的對象?

如何對mongodb文檔中數組內所有對像中存在的特定數字字段求和

更新mongodb中對像數組的一個元素

在 Azure 持久函數中,如何獲取一個活動函數的輸出作為另一個函數的輸入

如何在mongodb的findOneAndUpdate中使用對像作為過濾器

如何在要解析的嵌套對像數組中獲取 RxJs Observable 的值?

如何從 MongoDB 中的數組中獲取多個元素?

如何在 MongoDB 中同時查詢兩個數組?

如何在對像數組中獲取具有唯一值的鍵?(JavaScript)

如何通過添加匹配對像作為新字段來合併兩個對像數組

如何在 python 中創建一個函數,它將整數列表作為輸入並輸出只有兩個值的較小列表?

如何在嵌套的對像數組中獲取對象路徑?

如何在mongodb的數組對象的嵌套數組中添加元素

如何從mongodb中的空對像中清除數組?

如果元素在數組中,如何在 mongoDB 中搜索

如何從 MongoDB 的嵌套對像中獲取特定詳細信息

如何獲取 matplotlib ax 對像作為函數的輸出,並將其用於繪圖?

如何在 MongoDB 中推入具有精確鍵值的對象嵌套數組?

MongoDB & PHP | 如何添加到數組內的對像中?