Javascript 观察嵌套数组的更改';t添加/更改返回元素
我在此光标上使用了一个Javascript 观察嵌套数组的更改';t添加/更改返回元素,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我在此光标上使用了一个observeChanges,如下所示。游标包含一个名为“messages”的嵌套数组 但是,这会生成所有消息,而不是更改或添加的消息。你怎么能把最后一个推过来?获取最后一个将无法按预期工作,因为您可以一次推送多个 在第一步中,您必须禁用observeChanges以仅捕获新事物: var init = true; Connections.find({ status: 'connected' }).observeChanges({ added: function (
observeChanges
,如下所示。游标包含一个名为“messages”的嵌套数组
但是,这会生成所有消息,而不是更改或添加的消息。你怎么能把最后一个推过来?获取最后一个将无法按预期工作,因为您可以一次推送多个
在第一步中,您必须禁用observeChanges以仅捕获新事物:
var init = true;
Connections.find({
status: 'connected'
}).observeChanges({
added: function (id) {
if(init) return;
console.log(`Connected ${id}`);
},
changed: function (id, fields) {
if(init) return;
// I expect fields to be the last array item pushed
console.log(fields['messages']);
}
});
init = false;
以下是Meteopad版本:
我找到了一种方法,它不是使用
observeChanges
,而是使用observes
Connections.find({
status: 'connected'
}).observe({
changed: function (newDoc, oldDoc) {
let newMessages = _.clone(newDoc.messages);
let old = _.clone(oldDoc.messages);
while (JSON.stringify(old) !== JSON.stringify(newMessages.slice(0, old.length))) {
old.shift();
}
let last = newMessages.slice(old.length);
}
});
我添加了一个示例。我不相信这是有意为之的我改变了答案,它应该做你想做的:)只是想知道在你的收藏规模增加的同时,你是否有性能问题。
Connections.find({
status: 'connected'
}).observe({
changed: function (newDoc, oldDoc) {
let newMessages = _.clone(newDoc.messages);
let old = _.clone(oldDoc.messages);
while (JSON.stringify(old) !== JSON.stringify(newMessages.slice(0, old.length))) {
old.shift();
}
let last = newMessages.slice(old.length);
}
});