Я пытаюсь сделать запрос из своей коллекции документов, которая выглядит так:
{ "_id" : ObjectId("94"), "EmailAddress" :"[email protected]","Interests": "CZ1001,CE2004" }
{ "_id" : ObjectId("44"), "EmailAddress" :"[email protected]", "Interests":"CE1001,CE4002" }
{ "_id" : ObjectId("54"), "EmailAddress" :"[email protected]","Interests":"CE1001,CE2002" }
Примером является то, что я хочу получить адреса электронной почты, учитывая, что поле «Интересы» имеет то значение, которое я ищу.
Пример: если я ищу CZ1001, я получу данные об адресе электронной почты Obj 1.
Если я буду искать CE1001, я получу данные об адресах электронной почты Obj 2 и Obj 3.
Идентификатор объекта создается уникальным образом, когда я вставляю записи в начале, если это помогает.
Я могу получить объекты в оболочке MongoDB, используя
db.users.find(Module: {"$regex": "CE1001"}})
Требуются только адреса электронной почты.
Я пытаюсь получить все адреса электронной почты и застрял на этом коде.
Document doc = (Document) collection.find(new BasicDBObject("Module", {"$regex":"CE1001"})) .projection(Projections.fields(Projections.include("EmailAddress"), Projections.excludeId())).first();
Где
new BasicDBObject("Module", {"$regex":"CE1001"}) не допускается.
new BasicDBObject("Module", String_variable) допускается
Это проект, который ранее выполнялся другими, я не могу контролировать, как он хранился при запуске. Так что я не могу этого сделать.
Что вы имеете в виду под "в java"? Вы загружаете все документы и хотите отфильтровать результаты? Что у вас есть на данный момент?
Как и в Java, я хочу получить эти электронные письма и оттуда отправлять уведомления об этих письмах. Я могу получить объекты в оболочке MongoDB с помощью db.users.find (Module: {"$ regex": "CE1001"}})
Если вы можете поместить объект в оболочку, то в чем проблема?
Если вы используете mongo-java-driver, в QueryBuilder есть метод regex: mongodb.github.io/mongo-java-driver/3.8/javadoc/index.html?c om /…
mongodb java не позволяет получить доступ к collection.find таким образом. Document doc = (Document) collection.find (new BasicDBObject ("Module", {"$ regex": "CE1001"})) .projection (Projection.fields (Projection.include ("EmailAdd ress"), Projection.excludeId ())).первый(); new BasicDBObject ("Модуль", {"$ regex": "CE1001"}) не допускается. Однако новый BasicDBObject ("Модуль", String_variable) разрешен
Попробуйте new BasicDBObject("Module", new BasicDBObject("$regex", "CE1001"))
Попробуйте doc.getString("EmailAddress")
@Veeram Спасибо! Это тоже только что обнаружил. Однако я смог получить только 1 запись, так как я использую .first () в конце поиска коллекции. Есть ли способ повторить, как цикл for, для проверки всех записей, чтобы увидеть, есть ли еще записи, подходящие для «CE1001»? Если я удалю .first (), появится сообщение об ошибке.
Попробуйте FindIterable<Document> results= collection.find.. for(Document doc : results) { ... }
@Veeram FindIterable <Document> results = collection.find (новый BasicDBObject ("Module", новый BasicDBObject ("$ regex", "CE1001"))). Projection (Projection.fi elds (Projection.inc lude ("EmailAddress ") , Projection.excludeId ())). First (); Выдает ошибку «Документ не может быть преобразован в FindIterable <Document>. Поэтому я попробовал FindIterable <Document> results = (FindIterable <Document>) collection.find, но при компиляции я получаю следующую ошибку:« Исключение в потоке «main» java. lang.ClassCastException: org.bson.Document нельзя преобразовать в com.mongodb.client.FindIterable "
Вы хотите все? не используйте сначала
@Veeram Вау, вот почему это не сработало !! Спасибо вам за помощь!!
Возможный дубликат Регулярное выражение с оператором OR в Java - mongoDB




Для конкретного Interest ваш запрос mongoDB будет выглядеть (на примере CE1001):
db.collection.find({
$or: [
{
Interests: {
$regex: "^CE1001,"
}
},
{
Interests: {
$regex: ",CE1001,"
}
},
{
Interests: {
$regex: ",CE1001$"
}
}
]
},
{
"EmailAddress": 1
})
Для тех, кто случайно зашел на этот пост. Ниже приведены рабочие коды. Кредиты для @Veeram.
FindIterable <Document> results = collection.find(new BasicDBObject("Module", new BasicDBObject("$regex", "CE1001")) .projection(Projections.fields(Projections.include("EmailAddress"), Projections.excludeId()));
for(Document doc : results) {
doc.getString("EmailAddress")
}
нельзя ли хранить
Interestsв виде массива?