【发布时间】:2018-09-08 08:59:27
【问题描述】:
我想获取我查询的文档数组中的每个元素,并检查它是否在我查询的其他文档数组中
我有这个模型:
var dataTypeSchema = new Schema({
name : String,
description : String,
// Personnel || Professionel || Intime
category : String,
provenance : {
type : Schema.ObjectId,
ref : 'Service'
}
});
还有这个:
var dataUseSchema = new Schema({
purpose : {
type : Schema.ObjectId,
ref : 'Purposes'
},
dataTypes : [{
type : Schema.ObjectId,
ref : 'DataType'
}],
description : String,
service : {
type : Schema.ObjectId,
ref : 'Service'
},
user : {
type : Schema.ObjectId,
ref : 'User'
}
});
我基本上是查询一组数据类型,然后想检查每个数据类型是否在特定的 dataUse.data 中
我尝试了几种比较方法:includes,indexOf,甚至比较每个元素_ids,它总是返回false
我检查了两个数组确实包含文档,并且它们有一些共同的文档
这是我的比较代码(一次尝试),我首先得到一个 DataUses 数组,然后对于每个我想检查它与 dataTypesArray 共享的值
const dataTypesArray = await Service.getServiceDataTypes(req.params.serviceName)
DataUse.find({service : serviceID, user : serviceID})
.populate('purpose dataTypes service user')
.exec()
.then(dataUses => {
for(let j = 0; j < dataUses.length; j++) {
for(let k = 0; k < dataTypesIDs.length; k++) {
if(dataUses[j].dataTypes.indexOf(dataTypesIDs[k])==-1) {
dataUses[j]["otherData"].push(dataTypesIDs[k])
}
}
}
return dataUseArray
})
.catch(console.log)
对于最后一个if (condition),所有设置都等于-1
两个 dataTypes 数组都已填充,但正如我所说,我尝试仅比较 _id 并且结果仍然相同
谢谢!
【问题讨论】:
-
我已经改进了你的代码,也发布了答案。
-
@MuhammadFaizan 非常感谢改进,你知道比较的问题来自哪里吗?
-
在javascript中你不能比较像
{} === {} // false这样的对象 -
@AlexandruOlaru 那么你怎么能比较它们呢?我试过只是比较_ids,也不起作用