Spring MongoDb:使用bean类创建关于未知字段的索引



我遇到了一个问题,我不知道是否可以这样做。

我需要用已知字段存储文档类,但也需要用未知字段存储它:

@Document
public class Metadata {
@Indexed
private String user;
private Object metadata;
}

所有这些未知字段都存储在metadata字段中。

然而,我认识他们中的一些人。我的意思是,在metadata字段中,用户想要什么就有什么,但应用程序知道一些字段。

我想知道如何创建关于这些未知的已知metadata字段的索引。

示例:

{ user: user, metadata: {known: v, unknown: nv}} }

我想在metadata.known字段创建一个索引。

问题是,由于该字段没有设置为javabean字段,因此我无法将其注释为@Indexed

有什么想法吗?

作为猜测,为什么不将metadata Object一分为二?

一个用于可以索引的已知字段,另一个用于无法索引的未知字段。例如:

@Document
public class Metadata {
@Indexed
private String user;
@Indexed
private Object knownMetadata;
private Object unknownMetadata;
}

因此,你会有类似的东西:

{ user: user, knownMetadata: {knownField1: v, knownField2: nv}, unknownMetadata: {unknownField1: v, unknownField2: nv}} }

对于已知字段,可以使用复合索引注释创建索引。它实际上并没有强迫你有一个复合指数。

考虑一下这个bean:

@CompoundIndexes({
@CompoundIndex(name="my_index", def = "{'metadata.known' : 1}", background=true),
})
@Document
@Document
public class Metadata {
@Indexed
private String user;
private Object metadata;
}

这将在字段上创建一个索引:metadata.known-您可以在任何已知字段上执行此操作,并在注释中定义它们。

最新更新