Как фильтровать с Пн go и на нескольких полях - PullRequest
0 голосов
/ 02 марта 2020

Я ищу, как работать с этим делом с mon go и mon goose.

У меня есть это JSON

    [
      { title: 'foo', description :'bar', requirements: 'fooBar'},
      { title: 'baz', description :'foo', requirements: 'BarFoo'},
      { title: 'bar', description : 'baz', requirements: 'BazBaz' }
    ]

Мои цели - исследовать с ключевым словом 'bar', в приоритете, в поле 'title', затем 'description' и, наконец, в поле 'требования'.

case 1: ключевое слово: поиск 'bar' (содержит ключевое слово)

ВЫХОД:

[
  { title: 'bar', description :'baz', requirements: 'BazBaz'},
  { title: 'foo', description : 'bar', requirements: 'fooBar' },
  { title: 'baz', description :'foo', requirements: 'BarFoo'},
]

case 2: ключевое слово: 'fooBar'

OUTPUT

[
  { title: 'foo', description :'bar', requirements: 'fooBar'},
]

case 3: ключевое слово: 'foo'

ВЫХОД

    [
      { title: 'foo', description :'bar', requirements: 'fooBar'},
      { title: 'baz', description :'foo', requirements: 'BarFoo'},
    ]

Я использую это агрегирование, но не ожидал результата:

$or: [
  {
    title:
    {
      $regex: req.query.keyword,
      $options: 'i'
    }
  },
  {
    description:
      {
        $regex: req.query.keyword,
        $options: 'i'
      }
  }
],

Благодаря помощи

1 Ответ

0 голосов
/ 02 марта 2020

Я пробовал не агрегирование, а find() с оператором $or.

Вот пример данных:

> db.mycollection.find()
{ "_id" : ObjectId("5e5d2b9a0c25b1266860ada3"), "title" : "foo", "description" : "bar", "requirements" : "fooBar" }
{ "_id" : ObjectId("5e5d2ba50c25b1266860ada4"), "title" : "baz", "description" : "foo", "requirements" : "BarFoo" }
{ "_id" : ObjectId("5e5d2bae0c25b1266860ada5"), "title" : "bar", "description" : "baz", "requirements" : "BazBaz" }

И вот запрос:

> db.mycollection.find({
    $or: [ 
      { 
        title: { $regex: "bar", $options: "i"}
      },
      { 
        description: { $regex: "bar", $options: "i" }
      } 
    ]
})

{ "_id" : ObjectId("5e5d2b9a0c25b1266860ada3"), "title" : "foo", "description" : "bar", "requirements" : "fooBar" }
{ "_id" : ObjectId("5e5d2bae0c25b1266860ada5"), "title" : "bar", "description" : "baz", "requirements" : "BazBaz" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...