我尝试在我的文档中使用.set
在其中设置2个值,但它给了我这个错误
Field 'friendRequests' is specified in your field mask but not in your input data.
我的代码中的这一行触发了错误:
mCollRef.document(documentID).set(tempUser, SetOptions.mergeFields(fieldsToUpdate))
当我不使用 SetOptions
时,一切正常,只有mCollRef.document(documentID).set(tempUser)
我在这里做错了什么?
我的代码:
mCollRef.whereEqualTo("userID", clickedUserID)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()) {
List<String> fieldsToUpdate = Arrays.asList("friendRequests", "friends");
for(QueryDocumentSnapshot document : task.getResult()) {
User tempUser = document.toObject(User.class);
tempUser.updateFriends(mUsersName, mUsersID, 1);
tempUser.updateFriendRequests(myNoDotEmail, 2);
String friendName = tempUser.getUserName();
String documentID = document.getId();
mCollRef.document(documentID).set(tempUser, SetOptions.mergeFields(fieldsToUpdate))
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(FriendsActivity.this, "Friend Added", Toast.LENGTH_SHORT).show();
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(FriendsActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
值得指出的是,有时它会起作用,就像1/10它会毫无理由地工作而其他9次它只是没有
答案 0 :(得分:0)
所以,事实证明错误是由我的代码SetOptions
调用上面几行引起的:
http://rextester.com/l/nodejs_online_compiler
正如您在上面所看到的,字段friendRequests
不为空,但我使用问题tempUser.updateFriendRequests(myNoDotEmail, 2);
中的此代码将其设置为空,并且当它显示错误时。当有2个或更多friendRequests
并且我删除其中一个时,一切都有效,而不是让字段完全为空。
原来不能调用SetOptions.mergeFields
来将文档中的嵌套映射设置为空映射。