gpt4 book ai didi

Java morphia - 按列表字段中的值查询

转载 作者:行者123 更新时间:2023-12-02 00:25:07 25 4
gpt4 key购买 nike

不确定这是否可行,但可以了。

我有一个 MongoDB(使用 morphia 来访问它),其表如下所示(本示例进行了简化,但概念是相同的):

{ Name : "Robert", NickNames : [ "Bob", "Twinkletoes" ] }
{ Name : "Trevor", NickNames : [ "Bob", "Mad man", "Tweedledee" ] }
{ Name : "Samuel", NickNames : [ "Sam" ] }
{ Name : "Patrick", NickNames : [ "Bob", "Mad man" ] }
{ Name : "Mark", NickNames : [ "Adam", "Bob", "Georg" ] }

出于本示例的目的,我们假设昵称始终按字母顺序排列,并且昵称所在的位置是相关的。

因此,正如我们所看到的,每个人的记录在列表中可以有不同数量的昵称。我如何执行以下搜索:

  • 给我所有第一个昵称“Bob”和第二个昵称“Mad man”的人(即 Person.Nicknames[0] =“Bob” && Person.Nicknames[1] =“Mad man”)

    应返回 2 条记录 - Trevor 和 Patrick。

  • 给我所有第一个昵称为“Bob”的人(即 Person.Nicknames[0] =“Bob”)

    应返回 3 条记录 - Robert、Trevor 和 Patrick。

请注意,Mark 未返回,因为他的昵称“Bob”不在第一个索引中。

有什么办法可以做到这一点吗?

最佳答案

将元素插入数组后,它们的顺序将被保留。

查询应该按照您期望的方式工作:(为简洁起见,省略_id)

> db.people.find({"NickNames.0":"Bob", "NickNames.1":"Mad man"}, {_id:0})
{ "Name" : "Trevor", "NickNames" : [ "Bob", "Mad man", "Tweedledee" ] }
{ "Name" : "Patrick", "NickNames" : [ "Bob", "Mad man" ] }
> db.people.find({"NickNames.0":"Bob"}, {_id:0})
{ "Name" : "Robert", "NickNames" : [ "Bob", "Twinkletoes" ] }
{ "Name" : "Trevor", "NickNames" : [ "Bob", "Mad man", "Tweedledee" ] }
{ "Name" : "Patrick", "NickNames" : [ "Bob", "Mad man" ] }
>

“点表示法(到达对象)”文档的“按位置排列元素”部分对此有一个简短的注释: http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29#DotNotation%28ReachingintoObjects%29-ArrayElementbyPosition

以上是在JS shell中完成的。我对 Morphia 不熟悉,因此您必须自己将查询翻译为正确的 Morphia 语法。希望这有帮助!

关于Java morphia - 按列表字段中的值查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201122/

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