Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB查询";或;使用从JSP传递的参数的运算符_Java_Mongodb_Jsp_Servlets_Mongodb Query - Fatal编程技术网

Java MongoDB查询";或;使用从JSP传递的参数的运算符

Java MongoDB查询";或;使用从JSP传递的参数的运算符,java,mongodb,jsp,servlets,mongodb-query,Java,Mongodb,Jsp,Servlets,Mongodb Query,在我的项目中,我将一个参数从JSP传递到servlet,并以如下方式接收: String name= request.getParameter("name"); 我成功地使用以下查询,使用名称字段搜索集合中的记录,如下所示: List<Document> names= collection.find(eq("name", name)).into(new ArrayList<Document>()); List name=collection.find(eq(“name

在我的项目中,我将一个参数从JSP传递到servlet,并以如下方式接收:

String name= request.getParameter("name");
我成功地使用以下查询,使用名称字段搜索集合中的记录,如下所示:

List<Document> names= collection.find(eq("name", name)).into(new ArrayList<Document>());
List name=collection.find(eq(“name”,name)).into(new ArrayList());
我的下一步是从JSP中的用户获取任何字段(姓名、地址、年龄),并在mongodb中搜索包含该字段(由用户输入)的记录,然后显示结果。为此,我尝试使用以下方法失败:

 List<Document> names= collection.find(or("name", name),("address", name),("age", name)).into(new ArrayList<Document>());
List name=collection.find(或(“name”,name),(“address”,name),(“age”,name)).into(new ArrayList());
其中“name”是从JSP传递的参数

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

提前感谢。

错误 1) 它不会被编译,因为
需要几个
com.mongodb.client.model.Filters
作为参数,例如单个
中的几个
eq
子句
2)
name
变量用于过滤
address
age
字段,您应该使用相应的请求参数。否则,您将无法得到正确的结果

正确代码
String name=request.getParameter(“name”);
字符串地址=request.getParameter(“地址”);
字符串年龄=request.getParameter(“年龄”);
List name=collection.find(或(eq(“name”,name),eq(“address”,address),eq(“age”,age)).into(new ArrayList());
完全工作使用 使用MongoDB驱动程序v3.5.0在Java 8+MongoDB 3.4上测试(使用硬编码值而不是解析jsp请求对象):

import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入com.mongodb.*;
导入com.mongodb.client.MongoCollection;
导入com.mongodb.client.MongoDatabase;
导入org.bson.Document;
导入静态com.mongodb.client.model.Filters.*;
公共班机{
公共静态void main(字符串[]args){
试一试{
//虚拟连接
MongoClient=新的MongoClient();
MongoDatabase database=client.getDatabase(“stackoverflow_test_db”);
MongoCollection collection=database.getCollection(“stackoverflow\u test\u col”);
//虚拟数据
collection.insertMany(Arrays.asList(
parse({name:'name-1',address:'address-1',age:'age-1'),
parse({name:'name-2',address:'address-2',age:'age-2'}),
parse({name:'name-3',address:'address-3',age:'age-3'}),
parse({name:'name-4',address:'address-4',age:'age-4'}),
parse({name:'name-5',address:'address-5',age:'age-5'})
));
//硬编码过滤器。假装我们用request.getParameter得到了这个
String name=“name-1”;
字符串地址=“地址-3”;
字符串age=“age-4”;
//查找
列表名称=集合。查找(或(
eq(“名称”,名称),
等式(“地址”,地址),
eq(“age”,age))。转换为(new ArrayList());
//打印结果
name.forEach(System.out::println);
//清仓
collection.drop();
}捕获(MongoException e){
e、 printStackTrace();
}
}
}
输出 文件{{{u id=59de7992bb63df2984a4d4a2,name=name-1,address=address-1,age=age-1}} 文件{{{u id=59de7992bb63df2984a4d4a4,name=name-3,address=address-3,age=age-3} 文件{{{u id=59de7992bb63df2984a4d4a5,name=name-4,address=address-4,age=age-4}}

错误 1) 它不会被编译,因为
需要几个
com.mongodb.client.model.Filters
作为参数,例如单个
中的几个
eq
子句
2)
name
变量用于过滤
address
age
字段,您应该使用相应的请求参数。否则,您将无法得到正确的结果

正确代码
String name=request.getParameter(“name”);
字符串地址=request.getParameter(“地址”);
字符串年龄=request.getParameter(“年龄”);
List name=collection.find(或(eq(“name”,name),eq(“address”,address),eq(“age”,age)).into(new ArrayList());
完全工作使用 使用MongoDB驱动程序v3.5.0在Java 8+MongoDB 3.4上测试(使用硬编码值而不是解析jsp请求对象):

import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入com.mongodb.*;
导入com.mongodb.client.MongoCollection;
导入com.mongodb.client.MongoDatabase;
导入org.bson.Document;
导入静态com.mongodb.client.model.Filters.*;
公共班机{
公共静态void main(字符串[]args){
试一试{
//虚拟连接
MongoClient=新的MongoClient();
MongoDatabase database=client.getDatabase(“stackoverflow_test_db”);
MongoCollection collection=database.getCollection(“stackoverflow\u test\u col”);
//虚拟数据
collection.insertMany(Arrays.asList(
parse({name:'name-1',address:'address-1',age:'age-1'),
parse({name:'name-2',address:'address-2',age:'age-2'}),
parse({name:'name-3',address:'address-3',age:'age-3'}),
parse({name:'name-4',address:'address-4',age:'age-4'}),
parse({name:'name-5',address:'address-5',age:'age-5'})
String name = request.getParameter("name");
String address = request.getParameter("address");
String age = request.getParameter("age");


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

import com.mongodb.*;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import static com.mongodb.client.model.Filters.*;

public class Main {

    public static void main(String[] args) {

        try {

            // Dummy connection
            MongoClient client = new MongoClient();
            MongoDatabase database = client.getDatabase("stackoverflow_test_db");
            MongoCollection<Document> collection = database.getCollection("stackoverflow_test_col");

            // Dummy data
            collection.insertMany(Arrays.asList(
                    Document.parse("{name:'name-1', address:'address-1', age:'age-1'}"),
                    Document.parse("{name:'name-2', address:'address-2', age:'age-2'}"),
                    Document.parse("{name:'name-3', address:'address-3', age:'age-3'}"),
                    Document.parse("{name:'name-4', address:'address-4', age:'age-4'}"),
                    Document.parse("{name:'name-5', address:'address-5', age:'age-5'}")
            ));

            // Hardcoded filters. Pretend like we got this with request.getParameter
            String name = "name-1";
            String address = "address-3";
            String age = "age-4";

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

            // Print results
            names.forEach(System.out::println);

            // Clear storage
            collection.drop();
        } catch (MongoException e) {
            e.printStackTrace();
        }
    }
}
{
    "_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());
}
Filters.or(condition, condition, ...)
Filters.or(Filters.eq("name", parameterValue), Filters.eq("address", parameterValue), Filters.eq("age", parameterValue))