#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
}
}
]
}