簡體   English   中英

如何加入然后查詢mongoose

[英]How to join then perform query on mongoose

假設我有 2 個架構

// User
{
  name: { type: Types.Name, required: true, index: true }
}

// Book
{
  name: { type: Types.String, index: true },
  author: { type: Types.Relationship, ref: 'User', index: true }
}

我想在“name”字段和“author.name”字段之間使用 OR 運算符對 Book 模式執行搜索查詢(這意味着如果我輸入“abc”搜索,它將返回名稱包含“abc”或 Books 的任何書籍'作者姓名包括“abc”)。 我怎樣才能做到這一點? 感謝您的幫助,在此先感謝。

P/S: 如果我有

User Collection
_id     name
1       Foo
2       Bar
3       XYZ

Book Collection
_id     name     author
1       BookA    1
2       Foo      2
3       BookC    2
4       BookD    3

因此,當我在 Book Collection 中輸入“Foo”搜索鍵進行查詢時,它將返回:

   _id     name     author
   1       BookA    1        (because author 1 name "Foo")
   2       Foo      2

以下查詢會有所幫助:

db.Book.aggregate([
  {
    $lookup: {
      from: "User",
      localField: "author",
      foreignField: "_id",
      as: "user"
    }
  },
  {
    $unwind: {
      path: "$user",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    $match: {
      $expr: {
        $or: [
          {
            $eq: [
              "$name",
              "Foo" // Replace with your search string.
            ]
          },
          {
            $eq: [
              "$user.name",
              "Foo" // Replace with your search string.
            ]
          }
        ]
      }
    }
  },
  {
    $project: {
      name: 1,
      author: 1
    }
  }
])

注意:以上查詢是在純 Mongo 中,您可以輕松地將其轉換為您需要的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM