javascript - 过滤两个 MongoDB 数组不起作用(ES6)
问题描述
我要求 MongoDB 提供两个数组objectIDs
,然后尝试比较这两个数组以找出差异。
我还使用res.locals
.
这是代码:
let questions = res.locals.questions;
let answers = res.locals.answers;
let outstanding = questions.filter(oid => !answers.includes(oid));
console.log("The outstanding oids: "+outstanding)
结果总是blank
。
也许与 MongoDB 的格式或 res.locals 格式有关?感谢任何建议。
这是两个数组的样子:
questions: ["5f522bc55dd8993e58283526","5f522ab45dd8993e58283521","5f522ba65dd8993e58283525","5f522a5e5dd8993e5828351f","5f47a9a0b1764c3e285d4666"]
answers: ["5f522ab45dd8993e58283521","5f522bc55dd8993e58283526"]
解决方案
我猜您在数组中的值是 ObjectID 而不是字符串,因此您不能只将它们与 like==
运算符进行比较。
值得庆幸的是,猫鼬提供.equals()
了比较对象 ID。
let outstanding = questions.filter(oid => !answers.some(answer => oid.equals(answer)));
http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html#equals
推荐阅读
- node.js - Mongoose E11000 重复密钥,用户名字段不唯一
- c - [C]为什么C标准规定全局变量要初始化为0?
- typescript - 声明函数参数类型
- web - 代理同域下不同域的微前端
- flutter - 如何在 Flutter 中获取所有 Android 小部件的列表
- javascript - Google App Script 在 JSON 中的位置 0 处抛出 Unexpected token e 但只是有时
- powershell - 确定用户当前与 Citrix Receiver 连接
- haskell - 递归前的初始命令
- c++ - 编译时 C++ 函数检查是否所有模板参数类型都是唯一的
- python - 基数为 10 的 int() 的无效文字:b'13 18:33:25'