我遇到了一个我不知道是否有可能做的问题。
我需要将文档类与已知字段一起存储,但是我还需要将其与未知字段一起存储:
@Document
public class Metadata {
@Indexed
private String user;
private Object metadata;
}
所有这些未知字段都存储在metadata
字段中。
但是,我认识其中的一个人。我的意思是,在metadata
字段中,将有用户想要的任何内容,但是应用程序知道某些字段。
我想知道如何为这些未知的metadata
字段创建索引。
示例:
{ user: user, metadata: {known: v, unknown: nv}} }
我想在metadata.known
字段中创建索引。
问题是,由于未将此字段设置为Java bean字段,因此我无法将其注释为@Indexed
。
有什么想法吗?
答案 0 :(得分:0)
作为猜测,为什么不将 private void saveUserInformation() {
name = mNameField.getText().toString();
phone = mPhoneField.getText().toString();
Map userInfo = new HashMap();
userInfo.put("name", name);
userInfo.put("phone", phone);
mUserDatabase.updateChildren(userInfo);
if(resultUri != null){
StorageReference filepath = FirebaseStorage.getInstance().getReference().child("profileImages").child(userId);
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
byte[] data = baos.toByteArray();
UploadTask uploadTask = filepath.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
finish();
}
});
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
Map userInfo = new HashMap();
userInfo.put("profileImageUrl", downloadUrl.toString());
mUserDatabase.updateChildren(userInfo);
finish();
return;
}
});
}else{
finish();
}
}
分成两部分?
一个用于可索引的已知字段,另一个用于不可索引的未知字段。例如:
metadata Object
因此,您将获得类似于:
@Document
public class Metadata {
@Indexed
private String user;
@Indexed
private Object knownMetadata;
private Object unknownMetadata;
}
答案 1 :(得分:0)
对于已知字段,您可以使用复合索引注释创建索引。它实际上并不强制您具有复合索引。
考虑此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
上创建索引-您可以在任何已知字段上执行此操作并在注释中定义它们。