gpt4 book ai didi

java - 查找包含文本的所有对象的查询

转载 作者:可可西里 更新时间:2023-11-01 09:55:37 26 4
gpt4 key购买 nike

我有以下方法,它应该找到所有传递了 text="3"的对象:

private DBCursor queryForText(final String text) {

Pattern searchPattern = Pattern.compile(text);

DBObject query = QueryBuilder.start().or(
QueryBuilder.start(MMSI_KEY).regex(searchPattern).get(),
QueryBuilder.start(IMO_KEY).regex(searchPattern).get(),
QueryBuilder.start(NAME_KEY).regex(searchPattern).get(),
QueryBuilder.start(CALLSIGN_KEY).regex(searchPattern).get(),

QueryBuilder.start(TYPEOFSHIP_KEY).regex(searchPattern).get(),
QueryBuilder.start(LENGTH_KEY).regex(searchPattern).get(),
QueryBuilder.start(WIDTH_KEY).regex(searchPattern).get())
.get();

return getVesselsCollection().find(query);
}

我的问题是,TYPEOFSHIPLENGTHWIDTH 来自 int 类型。因此,如果有人输入文本 =“3”,则不会找到这些属性,因为它们不是字符串。我正在寻找一种不按值类型区分的方法,例如与类型转换?我不知道如何继续,也许我仍然不熟悉 mongoDB。

编辑: http://docs.mongodb.org/manual/reference/sql-comparison/在那里你看到了 SQL 和 MONGODB 之间的关系。我想我需要这样的东西:

SELECT *
FROM users
WHERE user_id like "%3%"

但是 QueryBuilder 似乎没有提供类似like 的东西。

这就是我想让它工作的 JUnit 测试:

@Test
public void testSearchForTextt() {
// Given
VesselController controller = new VesselControllerImpl();
controller.create("hugo", "bene", "2", "3", 4, 5, 6);
controller.create(" ", "bene", "2", "3", 3, 6, 7);
controller.create("3", "bene", "3", "hugo", 5, 6, 7);
controller.create("3-name", "herbert", "Toto", "hugo", 5, 6, 7);

proveAmountOfVessels(controller, 4);

proveSearch(controller, "bene", 3);
proveSearch(controller, "hugo", 3);
proveSearch(controller, "3", 5);
proveSearch(controller, "[", 0);
proveSearch(controller, " ", 1);
}

private void ueberpruefeSuche(final VesselController controller, final String text, final int expectedElements) {
// When
Collection<Vessel> treffer = controller.findByText(text);
// Then
assertEquals(String.format("Wrong amount of elements '%s' found", text), expectedElements, treffer.size());
}

相关检查是:

proveSearch(controller, "3", 5); 

因为有不同种类的数据类型,所以它不起作用。上面显示的代码的我的 MongoDB 命令应该看起来几乎像这样:

db.vessels.find({$or : ['mmsi' : {$regex : 'text'}],
['imo' : {$regex : 'text'}],
['name' : {$regex : 'text'}],
['callsign' : {$regex : 'text'}],
...
['width' : {$regex : 'text'}]})

query: { $or: [ { mmsi: /3/ }, { imo: /3/ }, { name: /3/ }, { callsign: /3/ }, { typeofship: /3/ }, { length: /3/ }, { width: /3/ } ] }

我想这应该是正确的查询!但我不确定,因为结果不是我所期望的那样。

最佳答案

关于java - 查找包含文本的所有对象的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653528/

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