gpt4 book ai didi

node.js - 在 firestore 中引用查询

转载 作者:行者123 更新时间:2023-12-02 02:04:33 26 4
gpt4 key购买 nike

我正在尝试在 firestore 的集合中查找具有特定引用字段的所有文档。我看过一些关于此的文章,但似乎没有一篇起作用。我希望有人能告诉我我做错了什么。这是我尝试的第一个代码片段

const childOrgReference = db.collection(`organisations/${context.params.orgId}/childOrganisations`).doc(context.params.childOrgId);
// Find all people with corresponding childOrgReference
db.collection(`organisations/${context.params.orgId}/people`).where("childOrgReference", '==', childOrgReference).get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(docu) {
db.collection(`organisations/${context.params.orgId}/people`).doc(docu.id).update({
"isDeleted": true,
});
});
});

问题是没有找到文档,我通过记录 ID 进行了测试。 childOrgReference 应该是正确的。我还尝试了另一段代码:

// const childOrgReference = db.collection(`organisations/${context.params.orgId}/childOrganisations`).doc(context.params.childOrgId);
// Find all people with corresponding childOrgReference
db.collection(`organisations/${context.params.orgId}/people`).where("childOrgReference.id", '==', context.params.childOrgId).get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(docu) {
db.collection(`organisations/${context.params.orgId}/people`).doc(docu.id).update({
"isDeleted": true,
});
});
});

有人知道我做错了什么吗?


编辑:这是我当前的代码:

const childOrgReference = db.collection(`organisations/${context.params.orgId}/childOrganisations`).doc(context.params.childOrgId);
logger.log(childOrgReference);

// Find all people with corresponding childOrgReference
db.collection(`organisations/${context.params.orgId}/people`)
.where("childOrgReference", '==', childOrgReference)
.get()
.then(function(querySnapshot) {
const updates = [];
querySnapshot.forEach(function(docu) {
logger.log(docu.id);
const docuRef = db.collection(`organisations/${context.params.orgId}/people`).doc(docu.id);
updates.push(docuRef.update({"isDeleted": true}));
});

Promise.all(updates).then(() => {
console.log("Documents Updated");
}).catch((e) => console.log(e));
});

记录引用记录以下内容:

DocumentReference {
_firestore: Firestore {
_settings: {
projectId: 'fmis-online-dev',
firebaseVersion: '9.6.0',
libName: 'gccl',
libVersion: '4.9.9 fire/9.6.0',
ignoreUndefinedProperties: true
},
_settingsFrozen: true,
_serializer: Serializer {
createReference: [Function],
createInteger: [Function],
allowUndefined: true
},
_projectId: 'fmis-online-dev',
registeredListenersCount: 0,
bulkWritersCount: 0,
_backoffSettings: { initialDelayMs: 100, maxDelayMs: 60000, backoffFactor: 1.3 },
_clientPool: ClientPool {
concurrentOperationLimit: 100,
maxIdleClients: 1,
clientFactory: [Function],
clientDestructor: [Function],
activeClients: Map {},
failedClients: Set {},
terminated: false,
terminateDeferred: [Deferred]
}
},
_path: ResourcePath {
segments: [
'organisations',
'3dkI69YGRE20AMn9oNGL',
'childOrganisations',
'bunEfTrEjtNxaBlpT2zk'
]
},
_converter: {
toFirestore: [Function: toFirestore],
fromFirestore: [Function: fromFirestore]
}
}

这是 Firestore 控制台中显示的引用: enter image description here

问题是找不到人员文档。 id 不会被记录。我不知道哪里出了问题,但我怀疑人员文档中的引用可能不正确。但是,我不知道它应该是什么。

最佳答案

您的代码似乎是正确的并且对我有用。然而,你并没有履行 promise 。您应该使用 promise 链或异步等待:

const childOrgReference = db.collection(`organisations/${context.params.orgId}/childOrganisations`).doc(context.params.childOrgId);

// Find all people with corresponding childOrgReference
db.collection(`organisations/${context.params.orgId}/people`)
.where("childOrgReference", '==', childOrgReference)
.get()
.then(function (querySnapshot) {
const updates = []
querySnapshot.forEach(function (docu) {
const docuRef = db.collection(`organisations/${context.params.orgId}/people`).doc(docu.id)
updates.push(docuRef.update({"isDeleted": true});
});

Promise.all(updates).then(() => {
console.log("Documents Updated")
}).catch(e => console.log(e))
});

您还可以使用Batched Writes而不是运行多个 Promise。

const updatesBatch = db.batch()
querySnapshot.forEach(function (docu) {
const docuRef = db.collection(`organisations/${context.params.orgId}/people`).doc(docu.id)
updatesBatch.update(docuRef, {"isDeleted": true});
});
})
updatesBatch.commit().then(() => console.log("Updated"))

如果没有文档与您的查询相匹配,那么您正在查找的引用文献可能不匹配。

关于node.js - 在 firestore 中引用查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68617248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com