为什么我从集合中获取的文档没有 collection() 方法?
Why don't documents that I get from a collection have the collection() method?
我正在尝试遍历我的 firestore 数据库中的用户集合,这些用户是文档。我得到的用户文档中有子集合。在这些子集合中,我想添加一个文档。我目前正在将文档添加到子集合中,但我被告知集合方法不存在,因为 userDoc 仍然处于一个没有任何意义的承诺中,因为当我打印 userDoc 的 id 时,我获取 firestore 中文档的 ID。
错误:
Uncaught (in promise) TypeError: userDoc.collection is not a function
我的代码如下。
async function preformSignaling() {
let users = await negDoc.collection("users").get();
for (let userDoc of users.docs) {
if (isNotAlreadyConnected(userDoc.id)) {
let newPeerConnection = new UserConnection(servers, userDoc.id);
if (
userDoc.id != sessionStorage.getItem("userID") &&
userDoc.id != "metadata"
) {
let connOfferDescription =
await newPeerConnection.userPeerConnection.createOffer();
await newPeerConnection.userPeerConnection.setLocalDescription(
connOfferDescription
);
await userDoc.collection("offer-candidates").doc("offer").set({
offer: newPeerConnection.userPeerConnection.localDescription,
});
}
peerConnections.push(newPeerConnection);
}
}
}
class UserConnection {
constructor(servers, remoteUserID) {
this.userPeerConnection = new RTCPeerConnection(servers);
this.remoteStream = new MediaStream();
this.remoteUserID = remoteUserID;
getRemoteUserID() {
return this.remoteUserID;
}
}
相关代码:
await userDoc.collection("offer-candidates").doc("offer").set({
offer: newPeerConnection.userPeerConnection.localDescription,
});
问题与承诺无关;你在等待你应该等待的。问题是 userDoc
是一个 document snapshot (即查询数据库的结果),文档快照没有 .collection
方法。他们基本上只有一个 .data()
方法,然后是一些元数据属性(例如 .id
、.exists
)
相反,您需要执行以下操作:
await negDoc
.collection("users")
.doc(userDoc.id)
.collection("offer-candidates")
.doc("offer")
.set({
offer: newPeerConnection.userPeerConnection.localDescription,
});
我正在尝试遍历我的 firestore 数据库中的用户集合,这些用户是文档。我得到的用户文档中有子集合。在这些子集合中,我想添加一个文档。我目前正在将文档添加到子集合中,但我被告知集合方法不存在,因为 userDoc 仍然处于一个没有任何意义的承诺中,因为当我打印 userDoc 的 id 时,我获取 firestore 中文档的 ID。 错误:
Uncaught (in promise) TypeError: userDoc.collection is not a function
我的代码如下。
async function preformSignaling() {
let users = await negDoc.collection("users").get();
for (let userDoc of users.docs) {
if (isNotAlreadyConnected(userDoc.id)) {
let newPeerConnection = new UserConnection(servers, userDoc.id);
if (
userDoc.id != sessionStorage.getItem("userID") &&
userDoc.id != "metadata"
) {
let connOfferDescription =
await newPeerConnection.userPeerConnection.createOffer();
await newPeerConnection.userPeerConnection.setLocalDescription(
connOfferDescription
);
await userDoc.collection("offer-candidates").doc("offer").set({
offer: newPeerConnection.userPeerConnection.localDescription,
});
}
peerConnections.push(newPeerConnection);
}
}
}
class UserConnection {
constructor(servers, remoteUserID) {
this.userPeerConnection = new RTCPeerConnection(servers);
this.remoteStream = new MediaStream();
this.remoteUserID = remoteUserID;
getRemoteUserID() {
return this.remoteUserID;
}
}
相关代码:
await userDoc.collection("offer-candidates").doc("offer").set({
offer: newPeerConnection.userPeerConnection.localDescription,
});
问题与承诺无关;你在等待你应该等待的。问题是 userDoc
是一个 document snapshot (即查询数据库的结果),文档快照没有 .collection
方法。他们基本上只有一个 .data()
方法,然后是一些元数据属性(例如 .id
、.exists
)
相反,您需要执行以下操作:
await negDoc
.collection("users")
.doc(userDoc.id)
.collection("offer-candidates")
.doc("offer")
.set({
offer: newPeerConnection.userPeerConnection.localDescription,
});