如何在包含文档中对象的对象数组中搜索特定字段并在 firestore (firebase) (JS) 中更新它们
How to search for specific fields in an array of objects containing objects in a document and update them in firestore (firebase) (JS)
// Update the other user that current user has asked for revision
export async function updateOtherUserForContractRevision(contractID : string, comments : any) {
// getting userDetails
let currentUser : string | any = localStorage.getItem("userDetails");
currentUser = JSON.parse(currentUser);
// update fields in contractRecieved
const contractsRecievedRef : any = doc(db, "contractsRecieved", currentUser.uid);
// const queryContractsRecieved = query(contractsRecievedRef,
// where('contractDetails.contract.contractID','array-contains',contractID)
// );
// console.log(".////////updateOtherUserForContractRevision", queryContractsRecieved ,contractID)
onSnapshot(contractsRecievedRef, (doc: any) => {
doc.data().contract.map((contract: any) => {
if(contract.contractDetails.contract.contractID === contractID) {
// I reach my desired array Index and want to update the msg field to my comments parametre
console.log(".////////contract", contract);
}
})
})
}
我想更新我的 msg
字段以及 contract
对象中的 content
字段,后者又存在于 contract
的 contractDetails
对象中=] 数组(第 0 个索引)。我已经使用 onSnapShot
搜索并达到了我想要的数组值,如何在 onSnapShot
方法中更新这些字段?或者我应该使用另一种方法来搜索和更新数组包含的对象中的字段。
只是一个想法:如果我可以获得对数组索引的引用,然后使用它来更新对象,也许它会起作用
例如(我会更新sentForRevision
)
onSnapshot(contractsRecievedRef, async (doc: any) => {
doc.data().contract.map(async (contract: any) => {
if(contract.contractDetails.contract.contractID === contractID) {
console.log(".////////contract", doc.ref);
// If this contract.ref exists and points to the index present in the document
await updateDoc(contract.ref,{
"contractDetails.sentForRevision": true,
});
}
})
})
您无法根据包含在数组中的对象中存在的值来查询 Firestore 集合。这种过滤无法实现using partial data。我什至写了一篇关于这个主题的文章,名为:
如果需要,您可以复制要对其执行过滤的数据并将其添加到单独的数组中。这样,您可以使用 array-contains
运算符查询集合。获得所需文档后,您可以获取数组,执行更新,然后将文档写回 Firestore。
// Update the other user that current user has asked for revision
export async function updateOtherUserForContractRevision(contractID : string, comments : any) {
// getting userDetails
let currentUser : string | any = localStorage.getItem("userDetails");
currentUser = JSON.parse(currentUser);
// update fields in contractRecieved
const contractsRecievedRef : any = doc(db, "contractsRecieved", currentUser.uid);
// const queryContractsRecieved = query(contractsRecievedRef,
// where('contractDetails.contract.contractID','array-contains',contractID)
// );
// console.log(".////////updateOtherUserForContractRevision", queryContractsRecieved ,contractID)
onSnapshot(contractsRecievedRef, (doc: any) => {
doc.data().contract.map((contract: any) => {
if(contract.contractDetails.contract.contractID === contractID) {
// I reach my desired array Index and want to update the msg field to my comments parametre
console.log(".////////contract", contract);
}
})
})
}
我想更新我的 msg
字段以及 contract
对象中的 content
字段,后者又存在于 contract
的 contractDetails
对象中=] 数组(第 0 个索引)。我已经使用 onSnapShot
搜索并达到了我想要的数组值,如何在 onSnapShot
方法中更新这些字段?或者我应该使用另一种方法来搜索和更新数组包含的对象中的字段。
只是一个想法:如果我可以获得对数组索引的引用,然后使用它来更新对象,也许它会起作用
例如(我会更新sentForRevision
)
onSnapshot(contractsRecievedRef, async (doc: any) => {
doc.data().contract.map(async (contract: any) => {
if(contract.contractDetails.contract.contractID === contractID) {
console.log(".////////contract", doc.ref);
// If this contract.ref exists and points to the index present in the document
await updateDoc(contract.ref,{
"contractDetails.sentForRevision": true,
});
}
})
})
您无法根据包含在数组中的对象中存在的值来查询 Firestore 集合。这种过滤无法实现using partial data。我什至写了一篇关于这个主题的文章,名为:
如果需要,您可以复制要对其执行过滤的数据并将其添加到单独的数组中。这样,您可以使用 array-contains
运算符查询集合。获得所需文档后,您可以获取数组,执行更新,然后将文档写回 Firestore。