node.js:将ObjectIds数组与字符串对象id或字符串ObjectIds数组进行比较

时间:2016-02-11 17:35:25

标签: node.js mongoose

我的架构是:

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检查?

2 个答案:

答案 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)