我有一个名为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
,它等于5934fd84d6ba4c241259bed1
(users
数组的第一个元素)。
我正在检查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")
}
})
})
})
答案 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) {
}