![](/img/trans.png)
[英]gcloud nodejs datastore: how to create an entity with a parent?
[英]How to retrieve a child Entity from a cloud datastore without passing a parent key in nodejs
我有兩種實體;
在上述類型的實體中,子項與父鍵相關聯。
我需要僅基於子密鑰過濾孩子,因為我沒有父密鑰,只有子密鑰/ID。
const query = datastore.createQuery('Child')
.filter('__key__', '=', datastore.key(['Child', 123]))
奇怪的是,如果我通過一個 ">" 運算符,它將返回記錄,但是我需要一個精確的鍵匹配,以及一個解釋。
如果我必須添加一個復合索引,我將如何處理上述關系?
您如何分配子實體鍵 ID? 如果它使用分配 id api,那么 API 不能保證屬於不同父實體的子實體之間的唯一性。 結果,即使使用單獨的索引,您也無法唯一地查詢子項。
一種方法是為頂級實體分配 id,然后將該 id 用作子實體的屬性。 然后,您可以使用該屬性進行查詢並獲取與其關聯的唯一子項。
正如您在此處看到的那樣,您可以這樣做,通過添加 limit(1) 確保不會獲得多個結果。
const Datastore = require('@google-cloud/datastore');
const datastore = new Datastore({
projectId: 'cf-datastore',
keyFilename: 'datastore-credential.json'
});
const kindName = 'user-log';
async getlog = (req, res) => {
let uid = req.query.uid || req.body.uid || 0;
//let log = req.query.log || req.body.log || '';
const key = datastore.key(['uid','log']);
datastore
.get(key,(err, entity) => {});
const query = datastore.createQuery('uid');
query.filter('uid', uid);
query.limit(1);
const transaction = datastore.transaction();
console.log("Transaction");
console.log(transaction);
const results = datastore.runQuery(query, (err, entities) => {
// entities = An array of records.
// Access the Key object for an entity.
firstEntityKey = entities;
console.log("Entities")
console.log(entities);
});
console.log("GOT IT");
console.log("Results")
console.log(results);
//console.log("Entity");
//console.log(entity);
const task = await datastore.runQuery(query);
console.log(task);
//second part
res.status(200).send(results);
};
exports.executed = (req, res){
console.log(` CALLING`);
getlog(req, res)
setTimeout(() => {
resolve('resolved');
}, 20000);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.