我有以下目的
{ _id: 58ae39c54473f9cfd4eb29b6,
email: 'another@club.com',
name: 'Another Club Renamed',
__v: 0,
createdEvents: [],
instructors: [ 58a5ac4f84230a2117d1d6cb, 111111111111111111111111 ],
members: [] }
当我使用这个方法时
一个月一个月一个月一个月一个月
或
x1米2英寸x1米3英寸
结果总是假的我做错了什么吗Array.isArray(club.instructors)
返回真
编辑:该对象是一个mongoose.document
,上面的对象正是我执行时它记录到控制台的方式
Club.findById(id (err, club) =>{
console.log(club);
})
4条答案
按热度按时间eagi6jfj1#
mongo_id是12字节BSON类型对象Id,
因此,正常的
object.instructors.includes('58a5ac4f84230a2117d1d6cb')
意味着将原始字符串与ObjectId进行比较,ObjectId不是有效的整数或字符串,它将始终返回FALSE。使用lodash检查存储在多个集合中的同一ObjectId
npm i lodash --save
在您
file.js
中const _ = require('lodash');
lodash
_.isEqual
在两个值之间执行深度比较,以确定它们是否相等使用lodash并执行
_.isEqual
以进行深度比较假设
id``58ae39c54473f9cfd4eb29b6
来自两个不同的mongodb文档收集用户:
[{_id: 58ae39c54473f9cfd4eb29b6, name: 'user1' }]
假设此用户引用rooms
集合:收集室:
[{_id: ObjectId, name: 'room1', userId: 58ae39c54473f9cfd4eb29b6}]
如果像这样对
===
或includes
进行常规比较bjg7j2ky2#
正如Pointy所指出的(呵呵),您在数组中使用的值
58a5ac4f84230a2117d1d6cb
不是一个有效的数字,可能由于该无效性,您的对象没有被正确定义,因此所有内容都将返回false
,因为没有定义任何内容。我已经在
object.instructors.includes(111111111111111111111111)
上测试过了,它工作正常。我相信你的问题出在58a5ac4f84230a2117d1d6cb
上,如果你真的想保留它,应该用引号括起来,变成一个字符串。vktxenjb3#
如果你在js循环中使用includes,注意在for ... in循环和传统循环之间有一个 * tickle note *。)
该循环将迭代对象本身的所有可枚举属性以及对象从其构造函数原型继承的属性(原型链中距离对象较近的属性覆盖原型的属性)。
参考:Mozilla Web docs for javascript
cig3rfwq4#
如果你正在做一个搜索运算符,根据搜索的第一个结果,你可以尝试这个...
设{... x} =数组1;
控制台.日志(Array2.map((a)=〉a.字段).包含(x[0].字段))