gpt4 book ai didi

java - MongoDB 查询 "OR"运算符使用从 JSP 传递的参数

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:57 25 4
gpt4 key购买 nike

在我的项目中,我将参数从 JSP 传递到 servlet 并将其接收为:

String name= request.getParameter("name");

我成功使用以下查询使用名称字段在集合中搜索记录,如下所示:

List<Document> names= collection.find(eq("name", name)).into(new ArrayList<Document>());

我的下一步是在 JSP 中获取用户的任何字段(姓名、地址、年龄),并在 mongodb 中搜索具有该字段(由用户输入)的记录并显示结果。为此,我尝试使用失败:

 List<Document> names= collection.find(or("name", name),("address", name),("age", name)).into(new ArrayList<Document>());

其中“name”是从 JSP 传递的参数。

我想知道如何修改上述查询,以便无论用户输入什么(姓名、地址、年龄),查询都会搜索该记录并为我返回结果。在上面的查询中,我尝试使用“or”,它不会多次使用“name”参数。我想知道我在查询中使用的语法。甚至“or”似乎也不像“eq”那样起作用。

提前致谢。

最佳答案

以防万一:request.getParameter("name") 可能包含 nameaddressage 中的任何一个(因此需要应用单个“OR”查询),以下内容将起作用。

假设您的 Collection 有以下文档:

{
"_id" : ObjectId("59de76eddcc75598230985eb"),
"name" : "John",
"address" : "Baker Street",
"age" : 54
}

{
"_id" : ObjectId("59de770bdcc75598230985ec"),
"name" : "Joe",
"address" : "Main Street",
"age" : 48
}

{
"_id" : ObjectId("59de771adcc75598230985ef"),
"name" : "Jane",
"address" : "Baker Street",
"age" : 54
}

以下代码将返回您期望的文档(我认为!):

String parameterValue = "John";
Bson filter = Filters.or(Filters.eq("name", parameterValue), Filters.eq("address", parameterValue), Filters.eq("age", parameterValue));
FindIterable<Document> documents = collection.find(filter);

for (Document d : documents) {
// displays:
// { "_id" : { "$oid" : "59de76eddcc75598230985eb" }, "name" : "John", "address" : "Baker Street", "age" : 54 }
logger.info(d.toJson());
}

parameterValue = "Baker Street";
filter = Filters.or(Filters.eq("name", parameterValue), Filters.eq("address", parameterValue), Filters.eq("age", parameterValue));
documents = collection.find(filter);

for (Document d : documents) {
// displays:
// { "_id" : { "$oid" : "59de76eddcc75598230985eb" }, "name" : "John", "address" : "Baker Street", "age" : 54 }
// { "_id" : { "$oid" : "59de771adcc75598230985ef" }, "name" : "Jane", "address" : "Baker Street", "age" : 54 }
logger.info(d.toJson());
}

parameterValue = "48";
filter = Filters.or(Filters.eq("name", parameterValue), Filters.eq("address", parameterValue), Filters.eq("age", Integer.valueOf(parameterValue)));
documents = collection.find(filter);

for (Document d : documents) {
// displays:
// { "_id" : { "$oid" : "59de770bdcc75598230985ec" }, "name" : "Joe", "address" : "Main Street", "age" : 48 }
logger.info(d.toJson());
}

关键点是 ORed 查询的结构如下所示:

Filters.or(condition, condition, ...)

例如:

Filters.or(Filters.eq("name", parameterValue), Filters.eq("address", parameterValue), Filters.eq("age", parameterValue))

关于java - MongoDB 查询 "OR"运算符使用从 JSP 传递的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com