MongoDB aggregateRaw query - prisma - mongodb

aelbi1ox  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(201)

我有一个名为detailLog的MongoDB集合,其中包含用户活动的记录。我想检索特定用户的数据。
下面是我简化的当前查询:

const logs = await db.detailLog.aggregateRaw({
  pipeline: [
    {
       $lookup: {
         from: "Detail",
         localField: "detailId",
         foreignField: "id",
         as: "detail"
       }
     },
    {
      $match: { "detail.userId": userId }
    },
    .............
    ...............
    .................
  ]
});

字符串
下面是我对相关模型的Prisma模式的简化版本:

model Detail{
id                String  @id @default(auto()) @map("_id") @db.ObjectId
userId            String  @db.ObjectId
.............
...............
.................

detailLogs      DetailLog[]
}

model DetailLog {
id         String   @id @default(auto()) @map("_id") @db.ObjectId
detailId String   @db.ObjectId
.............
...............
.................

detail Detail @relation(fields: [detailId], references: [id], onDelete: Cascade)
}


我正在使用Nextjs、Prisma和mongoDB,并使用aggregateRaw函数在一个集合上运行聚合查询。然而,我想根据另一个集合的条件过滤结果,类似于where子句。我如何在聚合查询中实现这一点?
我确定有数据匹配userIduserId是正确的。如果我删除$match阶段,我成功地获得数据。
我很感激任何关于如何解决这个问题的指导。谢谢!

bzzcjhmw

bzzcjhmw1#

我通过如下修改代码解决了这个问题。谢谢大家。

const logs = await db.detailLog.aggregateRaw({
  pipeline: [
    {
       $lookup: {
         from: "Detail",
         localField: "detailId",
         foreignField: "_id",
         as: "detail"
       }
     },
    {
      $match: { "detail.userId": { '$oid': userId } }
    },
    .............
    ...............
    .................
  ]
});

字符串

相关问题