【发布时间】:2020-06-12 18:25:35
【问题描述】:
我想将消息 id 推送到 ip "list" 中,而不是将相同的 id 推送两次, 我尝试了很多方法,但都不起作用如何检查密钥是否存在?
let ipsLikes = (ip,msgId) => {
ip = ip.replace(/\./g, "dot");
let msgD;
let ref = db.ref(`ipslikes/${ip}`);
ref.on('value', function(snapshot) {
msgD = snapshot.val();
if (msgD !== null) {
if (Object.values(msgD).map((x, index) => Object.keys(x)[index]).includes(msgD)) {//Object.valuse(msgD).indexOf(msgId) > -1
console.log("New ID");
ref.push(msgId);
}
} else {
console.log("New IP");
ref.push(msgId);
}
});
}
ipsLikes('88.88.88.88',55);
ipsLikes('88.88.88.88',54);
ipsLikes('88.88.88.88',55);
ipsLikes('11.11.11.11',55);
ipsLikes('11.11.11.11',52);
在第一次运行时,它给出了这个输出,它甚至没有进入新 ID 行:
New IP
New IP
New IP
New IP
New IP
我如何告诉它检查键是否存在,然后检查值? 在不删除数据库的第二次运行中,它不会重写 ID,这很好但还不够。
更多尝试:
let ipsLikes = (ip,msgId) => {
ip = ip.replace(/\./g, "dot");
let idsArr = [];
let ref = db.ref(`ipslikes/${ip}`);
ref.on("value", function(snapshot) {
if (snapshot.exists()) {
snapshot.forEach(function(child) {
idsArr.push(child.val());
});
console.log(idsArr+"|"+msgId);
if (!idsArr.includes(msgId)) {
console.log("New ID");
ref.push(msgId);
}
} else {
console.log("Midlle");
ref.push(msgId);
}
});
}
ipsLikes('88.88.88.88',55);
ipsLikes('88.88.88.88',54);
ipsLikes('88.88.88.88',55);
ipsLikes('11.11.11.11',55);
ipsLikes('11.11.11.11',52);
返回:
Midlle
Midlle
Midlle
55|55
55|54
New ID
55|55
55,55,54|55
55,55,54|54
55,55,54|55
55,55,54,55,54,55|55
55,55,54,55,54,55|54
55,55,54,55,54,55|55
55,55,54,55,54,55,55,54,55,54|55
55,55,54,55,54,55,55,54,55,54|54
55,55,54,55,54,55,55,54,55,54|55
Midlle
Midlle
55|55
55|52
New ID
55,55,52|55
55,55,52|52
55,55,52,55,52,52|55
55,55,52,55,52,52|52
并写道:
let ipsLikes = (ip,msgId) => {
ip = ip.replace(/\./g, "dot");
let idsArr = [];
let ref = db.ref(`ipslikes/${ip}`);
ref.once("value").then( function(snapshot) {
snapshot.forEach(function (child) {
idsArr.push(child.val());
});
console.log(idsArr + "|" + msgId);
if (!idsArr.includes(msgId)) {
console.log("New ID");
ref.push(msgId);
}
});
}
ipsLikes('88.88.88.88',55);
ipsLikes('88.88.88.88',54);
ipsLikes('88.88.88.88',55);
ipsLikes('11.11.11.11',55);
ipsLikes('11.11.11.11',52);
输出:
|55
New ID
|54
New ID
|55
New ID
|52
New ID
|55
New ID
像第一张图片一样写入数据
在不删除数据库的情况下第二次运行:
它输出:
55,54,55|55
55,54,55|54
55,54,55|55
52,55|52
52,55|55
无需写入新数据...
我尝试了相同的方法,但使用 on 而不是一次,然后, 它写道:
输出:
|55
New ID
|54
New ID
|55
New ID
55|55
55|54
New ID
55|55
55,55,54|55
55,55,54|54
55,55,54|55
55,55,54,55,54,55|55
55,55,54,55,54,55|54
55,55,54,55,54,55|55
55,55,54,55,54,55,55,54,55,54|55
55,55,54,55,54,55,55,54,55,54|54
55,55,54,55,54,55,55,54,55,54|55
|55
New ID
|52
New ID
55|55
55|52
New ID
55,55,52|55
55,55,52|52
55,55,52,55,52,52|55
55,55,52,55,52,52|52
【问题讨论】:
标签: javascript node.js firebase firebase-realtime-database