我的架构是:
var schema = new Schema({
players: {
type: [Schema.Types.ObjectId]});
我正在使用Promises。我通过id获取集合的简单查询是:
MyModel.findById(id).exec()
.then(function (doc) {
//here I'm getting my doc
})
.catch(next)
我收到了我的文档,但问题出在这里我得到了一个ObjectIds数组,我想将这个ObjectIds数组与我在字符串形式中的ObjectId进行比较。在一种情况下,我想在ObjectIds数组中找到此字符串id的索引。
我尝试了 lodash ,如
var index = _.indexOf(doc.players, idInStringForm);//getting -1 as response
也试过
var index = _.indexOf(doc.players.toString().split(","), idInStringForm);//it is working
但是当我需要结合ObjectIds'数组上述逻辑失败,例如:
var arrayOfIds = _.union(doc.players.toString().split(","), stringArrayOfIds);
以上是行不通的,因为当doc.players为空时,arryaryOfIds也包含" " ,这使我的查询失败。
我们是否有针对上述案例的更好/更常见的解决方案,或者我们需要使用if-else检查?
答案 0 :(得分:0)
在检查数组和id的并集之前,您可以过滤掉任何空字符串。
function removeEmptyStrings(value) {
return value != "";
}
array = array.filter(removeEmptyStrings);
如果数组值等于空字符串,它将从数组中删除它。
请参阅此处的过滤方法文档:Filter
答案 1 :(得分:0)
为什么不Array.prototype.map
然后union
?
_.union(doc.players.map((player) => player._id), stringArrayOfIds)