Как я могу сделать несколько условных запросов на nosql - PullRequest
0 голосов
/ 06 мая 2020

Как сделать запрос no sql для запроса предоставления «if ((is_new: false || from: 'user1') && members: 'users1'», где members - это массив, состоящий из двух элементов members: [0: user1, 1: user2]?

 is_new: true
participants: Array 0: 5e3536e1b29cf92840171f3e
                    1: 5e3537a9b29cf92840171f3f
fromUserId: 5e3537a9b29cf92840171f3f

введите описание изображения здесь

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Почти готов @vector, нужно лишь немного изменить

  1. Предполагается, что скобка для $and должна включать как $or, так и другой запрос $elemMatch. Подробнее о $and см. здесь .
  2. Синтаксис $elemMatch неправильный. Подробнее о $elemMatch см. здесь .

Здесь я обновляю запрос для вас:

db.your_collection.find({
  $and: [
    {
      $or: [
        {
          is_new: false
        },
        {
          fromUserId: ObjectId("5e3536e1b29cf92840171f3e")
        }
      ]
    },
    {
      participants: {
        $elemMatch: {
          $eq: ObjectId("5e3536e1b29cf92840171f3e")
        }
      }
    }
  ]
})
0 голосов
/ 06 мая 2020

попробуйте это

db.collection.find({
  $or: [{ is_new: false }, { fromUserId: "userId1" }],
  participants: { $in: ["userId1"] }
})

вы можете проверить это здесь Пн go Детская площадка

Примечание: замените userId1 своим настоящим _id

надеюсь поможет

...