我遇到了一个问题,我不知道是否可以这样做。
我需要用已知字段存储文档类,但也需要用未知字段存储它:
@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
-您可以在任何已知字段上执行此操作,并在注释中定义它们。