如果您要查找属于促销promo_x_y 的所有产品,则需要将您的查询调整到比您当前所做的更深一层。
目前您正在将user_1、user_2 等的值与"promo_x_y" 的值进行比较。您没有得到任何结果,因为没有条目 /UsedPromos/user_1 = "promo_x_y" 存在。
/UsedPromosByUser/{user}/{product} = {promo} (your current structure)
要解决此问题,您需要搜索单个用户的产品列表。使用下面的 sn-p 将记录具有“promo_x_y”值的每个产品。
const admin = require("firebase-admin");
admin.initializeApp(/* ... */);
const ref = admin.database().ref("/UsedPromos");
const userToSearch = "user_1";
ref.child(userToSearch)
.orderByValue()
.equalTo("promo_x_y")
.once("child_added")
.then((snapshot) => {
// snapshot.val() will always be "promo_x_y", so don't bother logging it.
console.log(`${snapshot.key} uses "promo_x_y"`);
return snapshot;
});
根据您的用例,使用"value" 事件可能会更好。
const admin = require("firebase-admin");
admin.initializeApp(/* ... */);
const ref = admin.database().ref("/UsedPromos");
const userToSearch = "user_1";
ref.child(userToSearch)
.orderByValue()
.equalTo("promo_x_y")
.once("value")
.then((querySnapshot) => {
const productKeys = [];
// productSnapshot.val() will always be "promo_x_y", so don't bother logging it.
querySnapshot.forEach((productSnapshot) => productKeys.push(productSnapshot.key));
console.log(`The following products have a value of "promo_x_y" for user "${userToSearch}": ${productKeys.join(", "}`);
return productKeys;
});
如果您要查找所有用户中使用“promo_x_y”的所有产品,则应在数据库中创建索引,而不是使用查询。
/UsedPromosByPromo/{promo}/{user}/{product} = true
OR
/UsedPromosByPromo/{promo}/{product}/{user} = true
您可以存储时间戳(购买时间、促销到期时间等),而不是在上述结构中使用 true