在Google Cloud Firestore中使用v1 Client Library Wrapper创建文档



我正在尝试使用GCP的。net库:Google.Cloud.Firestore创建并添加文档到GCP Firestore。V1,然而,我无法弄清楚如何使用CreateDocumentRequest对象来调用CreateDocumentAsync方法。下面是一个方法的片段,它接受一个文档,然后将该文档传递给CreateDocumentRequest。我试图将文档对象强制转换为文档类型,但我得到一个无效强制转换异常:

public async Task<Document> CreateDocumentAsync(object document,
CancellationToken cancellationToken = default)
{
var docRequest = new CreateDocumentRequest
{
Document = (Document)document,
CollectionId = _collectionName,
Parent = _collectionReference.Parent.Path
};
return await _fireStoreDb.Client.CreateDocumentAsync(
docRequest, cancellationToken);
}

如何将自定义对象转换为类型Google.Cloud.Firestore。V1以便我可以在创建文档时设置文档数据?

Google.Cloud.Firestore的文档。V1显示了以以下方式使用它的代码片段:

public async Task CreateDocumentRequestObjectAsync()
{
// Snippet: CreateDocumentAsync(CreateDocumentRequest, CallSettings)
// Additional: CreateDocumentAsync(CreateDocumentRequest, CancellationToken)
// Create client
FirestoreClient firestoreClient = await FirestoreClient.CreateAsync();
// Initialize request argument(s)
CreateDocumentRequest request = new CreateDocumentRequest
{
Parent = "",
CollectionId = "",
DocumentId = "",
Document = new Document(),
Mask = new DocumentMask(),
};
// Make the request
Document response = await firestoreClient.CreateDocumentAsync(request);
// End snippet
}

我的意图是替换"文档"。属性,并将其添加到firestore中。

我可以看到如何使用Google.Cloud.Firestore库,如下所示:
public async Task AddAsync()
{
string projectId = _fixture.ProjectId;
// Sample: AddAsync
FirestoreDb db = FirestoreDb.Create(projectId);
// Create a document with a random ID in the "cities" collection.
CollectionReference collection = db.Collection("cities");
City city = new City
{
Name = "Los Angeles",
Country = "USA",
State = "CA",
IsCapital = false,
Population = 3900000L
};
// Alternatively, collection.Document("los-angeles").Create(city);
DocumentReference document = await collection.AddAsync(city);
// End sample
}

然而,我想用Google.Cloud.Firestore做同样的事情。提供V1客户端库包装器。

不幸的是,你正在尝试与Google.Cloud.Firestore.V1库的实现,从Document对象类传递不同的对象,并试图在CreateDocumentRequest中使用它是不可能的,或者至少不像你的最后一个片段示例与Google.Cloud.Firestore库一样简单。

要实现这一点,您需要创建一个带有MapField和其他类似属性的自定义对象,这些属性可以作为文档对象传递,并具有文档描述的相同格式。

如果可以使用引用的文档片段中描述的正常过程,那将是最好的选择,最后打开一个特性请求。下面是本例中使用Cloud函数的模板。

最新更新