JavaScript ==运算符未按预期进行评估

时间:2017-06-22 04:49:45

标签: javascript arrays express mongoose

我有一个名为conversations的数组,其中包含一个对象:

[ { _id: 594b45b68cbad2077dbc84d5,
    created_at: 2017-06-22T04:21:10.178Z,
    created_by_user_id: '5934fd84d6ba4c241259bed1',
    sent_to_user_id: '5934fe100b557624207db665',
    __v: 1,
    users: [ 5934fd84d6ba4c241259bed1, 5934fe100b557624207db665 ],
    messages: [] } ]

我有另一个值req.user._id,它等于5934fd84d6ba4c241259bed1users数组的第一个元素)。

我正在检查req.user._id是否与conversations.users[0]的值相等,然后返回一些内容。

if (convo.users[0] == req.user._id) {
  console.log("First element")
}

这应该返回true,并且console.log表达式应该运行,但事实并非如此。我错过了什么?

如果我将表达式设置为!=,它会评估条件。所以,

if (convo.users[0] != req.user._id) {
  console.log("First element")
}

工作(console.log("First element)运行),

if (convo.users[1] != req.user._id) {
  console.log("First element")
}

我正在使用Express和Mongoose。

修改

我正在运行forEach循环来迭代conversations,如下所示:

conversations.forEach((convo) => {
  if (convo.users[0] == req.user._id) {
    console.log("First element")
  }
})

更新

我想我知道它为什么不起作用,但我不知道如何解决它。 conversations是这样的数组:

[ { _id: 594b45b68cbad2077dbc84d5,
    created_at: 2017-06-22T04:21:10.178Z,
    created_by_user_id: '5934fd84d6ba4c241259bed1',
    sent_to_user_id: '5934fe100b557624207db665',
    __v: 1,
    users: [ 5934fd84d6ba4c241259bed1, 5934fe100b557624207db665 ],
    messages: [] } ]

具体来说,users是一个对象ID引用数组。 这是我的conversation.js模型:

var Conversation = mongoose.Schema({
    created_at: Date,
    users: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    ]

});

module.exports = mongoose.model('Conversations', Conversation);

它在我的users.js路线中使用如下:

var User = require('../models/user')
var Conversation = require('../models/conversation')

router.get('/member', ensureAuthenticated, function(req, res, next) {
  Conversation.find({ users: req.user._id }).exec((err, conversations) => {
    conversations.forEach((convo) => {
      if (convo.users[0] == req.user._id) {
        console.log("First element")
      }
    })
  })
})

3 个答案:

答案 0 :(得分:1)

  

问题必须在于您将字符串与mongoose进行比较   对象ID

ObjectIDs是对象,因此如果您只是将它们与==进行比较,那么您需要比较它们的引用。如果要比较它们的值,则需要使用ObjectID.equals方法:

if (results.userId.equals(MongoObject._id)) {
    ...
}

答案 1 :(得分:0)

使用req.user._id交叉检查一次,它是任何数组类型或直接有值。 我用下面的代码检查了它的工作正常

 var conversations = [ { _id: '594b45b68cbad2077dbc84d5',
    created_at: '2017-06-22T04:21:10.178Z',
    created_by_user_id: '5934fd84d6ba4c241259bed1',
    sent_to_user_id: '5934fe100b557624207db665',
    __v: 1,
    users: [ '5934fd84d6ba4c241259bed1', '5934fe100b557624207db665' ],
    messages: [] } ];
    var _id = '5934fd84d6ba4c241259bed1';
    if (conversations[0].users[0] == _id) {
  console.log("First element")
}

答案 2 :(得分:-1)

会话是和数组,但您尝试将其用作对象 可能是

if (conversations[0].users[0] == req.user._id) {

}