我有两种实体;
在上述类型的实体中,子级与父级键相关联。
我只需要基于子键来过滤子对象,因为我没有父键,只有子键/ id。
const query = datastore.createQuery('Child')
.filter('__key__', '=', datastore.key(['Child', 123]))
奇怪的是,如果我传递一个“>”运算符,它将返回记录,但是我需要一个精确的键匹配以及说明。
如果必须添加一个复合索引,对于上述关系我该怎么做?
答案 0 :(得分:0)
您可以看到here可以这样做,通过添加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);
}
答案 1 :(得分:-1)
您如何分配子实体密钥ID?如果使用分配ID api,则该API不能保证跨属于不同父实体的子实体的唯一性。结果,即使使用单独的索引,您也无法唯一地查询子项。
一种方法是为顶级实体分配ID,然后将该ID用作子实体的属性。然后,您可以使用该属性进行查询,并获得与之关联的唯一子项。