Как работает поиск числовых значений в MongoDB Atlas?

#java #mongodb #mongodb-atlas

#java #mongodb #mongodb-atlas

Вопрос:

Я новичок в MongoDB Atlas. Я хочу выполнить запрос, как показано ниже,

Пример документа:

 {
  message: "Hello",
  role: "student",
  status: 1
}
 

Запрос

 search 
WHERE 
'Hello' in field 'message' 
NOT [1 OR 2] in field 'status'
 

Я пробовал с compound и search , как показано ниже, но не смог получить то, что хочу.

 compound:{
    must:[{
      text: {
        query: 'Hello',
        path: 'message'
      }
    }],
   
    mustNot:[
      {
      text: {
        query: 1,
        path: 'status'
      }
    },
    {
      text: {
        query: 2,
        path: 'status'
      }
    }
    ]
  }
 

Это возвращает сообщение об ошибке,

 "Query" must be a string (from "compund.mustNot[2].text").
 

И когда я делаю их в виде строки, он не возвращает никаких значений. Я понимаю, что здесь я использую текстовый поиск, но я не смог найти никаких других альтернатив.
Разве невозможно выполнить поиск значений int в MongoDB Atlas?

Ответ №1:

Что-нибудь, если вы хотите попробовать с помощью find

 db.collection.find({
  $and: [
    {  message: "Hello" },
    {  status: { $nin: [1,2]}
    }
  ]
})
 

Рабочая игровая площадка mongo

Если вам нужно использовать $search , вы можете использовать array

 $search: {
    compound:{
        must:[{
          text: {
            query: 'Hello',
            path: 'message'
          }
        }],
       
        mustNot:[
          {
          text: {
            query: [1,2],
            path: 'status'
          }
        }
    ]
  }
}
 

Комментарии:

1. Спасибо за ответ, $search выдает ошибку ниже в Atlas MongoDB caused by :: "query[0]" must be a string (from "compound.mustNot[0].text")'

Ответ №2:

 db.getCollection("yourCollection").find({"message":"Hello","status":{$nin:[1,2]}});
 

Если вы хотите использовать $in , вы можете использовать его ниже … используя ‘$in’

 db.getCollection("yourCollection").find({"message":"Hello","status":{$in:[1,2]}});
 

Ответ №3:

  • Попробуйте это, проверьте, работает ли это
 compound:{
    must:[{
      text: {
        query: 'Hello',
        path: 'message'
      }
    }],
   
    mustNot:[
      {
      text: {
        query: 1,
        path: 'status'
      }
    },
    {
      text: {
        query: 2,
        path: 'status'
      }
    },
    {
      regex: {
        query: "([1-2]{1})",
        path: "status",
        allowAnalyzedField: true
      }
    } 
    ]
  }
 

документ