reactjs - 从对象集合返回特定数组
问题描述
所以我将一些数据放入我的套接字客户端中的代码是:
useEffect(() => {
const socket = io("http://localhost:5000/api/socket");
socket.on("newThought", (thought) => {
console.log(thought);
});
}, []);
然后我服务器中的代码是
connection.once("open", () => {
console.log("MongoDB database connected");
console.log("Setting change streams");
const thoughtChangeStream = connection.collection("phonenumbers").watch();
thoughtChangeStream.on("change", (change) => {
io.of("/api/socket").emit("newThought", change);
});
});
当我的“电话号码”集合中的某些内容发生变化时,我会得到整个集合的回报。我如何才能仅获取从集合中的对象更改的数组? 因此,例如,如果在集合中唯一更改的服务是 ID 为“607deefd13c4ebcbcfa0900a”的服务,它应该是唯一返回的服务,而不是整个集合对象。
解决方案
该fullDocument
方法的选项(第二个)参数的参数watch
可用于获取描述update
操作文档更改的增量:
const thoughtChangeStream = connection.collection("phonenumbers").watch([], {
fullDocument: 'updateLookup'
});
thoughtChangeStream.on("change", (change) => {
io.of("/api/socket").emit("newThought", change);
});
然后这将返回一个像这样的响应文档,其中updateDescription
包含更新修改的字段:
{
_id: {
_data: '8260931772000000012B022C0100296E5A1004ABFC09CB5798444C8126B1DBABB9859946645F696400646082EA7F05B619F0D586DA440004'
},
operationType: 'update',
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1620252530 },
ns: { db: 'yourDatabase', coll: 'yourCollection' },
documentKey: { _id: 6082ea7f05b619f0d586da44 },
updateDescription: {
updatedFields: { updatedField: 'newValue' },
removedFields: []
}
}
注意:这仅适用于update
操作,不适用于replace
, delete
,insert
等。
也可以看看:
推荐阅读
- regex - 如何匹配模式之前的第一个单词和正则表达式中的模式本身?
- mysql - 我可以通过子查询在 excel 中复制这个等式吗?我开始区分购买和销售,但现在我被困住了
- javascript - 如何在javascript中使秒表与服务器同步
- reactjs - 使用浪涌部署后的空白页面
- python-3.x - python:通过不允许“/”或“-”或“dir”安全地沙盒用户提供的代码
- performance - 有没有更快/更好的方法来运行这个 TSQL WHILE 循环?
- google-apps-script - 如何在测验中为 checkboxGridItem 问题分配正确答案?
- microsoft-graph-api - 删除日历事件中的对话成员 - MS Graph API
- python - 具有一名工人和 as_completed 的 Thredpoolexecutor
- c# - 如何在 Xamarin Forms 中按顺序显示(出现)元素