node.js - 在路径“值”处为值“值”转换为 ObjectId 失败
问题描述
我有两个模式用户和消息。当我尝试插入消息模式时,它会引发主题错误。我的期望是它应该在消息模式中添加用户的 _Id,但我无法弄清楚。我不知道它会抛出验证错误。这是我的用户架构:
var mongoose = require('mongoose')
var UserSchema = new mongoose.Schema({
userId: { type: String, createIndexes: { unique: true, required: true, trim: true } },
imagePath: String,
name: {
first: String,
middle: String,
last: String,
},
mobileNumber: String,
onlineStatus: {
type: String,
default: 'Online'
},
accountStatus: {
type: String,
default: 'Active'
},
lastSeen: Date,
socketId: String,
pushToken: String,
country: String,
city: String,
ipAddress: String,
timeZong: String,
continent: String,
createdAt: {
type: Date,
default: Date.now
},
lastUpdated: {
type: Date,
default: Date.now
}
});
UserSchema.pre('save', function (next) {
if (!this.createdAt) {
this.createdAt = new Date().now;
}
if (!this.accountStatus) {
this.accountStatus = "Active";
}
next();
});
module.exports = mongoose.model('Users', UserSchema)
这是消息模式
let mongoose = require('mongoose')
let userSchema = new mongoose.Schema({
message: String,
messageTo:
{
type: mongoose.Schema.Types.ObjectId,
ref: "Users",
required: 'To id cannot be empty',
},
messageFrom:
{
type: mongoose.Schema.Types.ObjectId,
ref: "Users",
required: 'From id cannot be empty',
},
messageRead: { type: Number, default: 0 },
receiverDeleted: { type: Number, default: 0 },
senderDeleted: { type: Number, default: 0 },
sendDate: {
type: Date,
default: Date.now()
},
receivedDate: Date
})
module.exports = mongoose.model('Messages', userSchema)
这就是我试图插入的方式。
var message = new ModelMessages();
message.message = params.message;
message.messageTo = params.messageTo;
message.messageFrom = params.messageFrom;
message.save((err, doc) => {
if (err) {
logger.error(`Unable to send IM. ${err} Stacktrace: ${err.stack}`);
} else if (doc) {
logger.info(`Sending message to recievers.`);
}
});
解决方案
在分配之前检查params.MessageTo
并且params.messageFrom
是 ObjectId 类型:
var ObjectId = mongoose.Types.ObjectId;
try {
message.messageTo = ObjectId(params.MessageTo)
message.messageFrom = ObjectId(params.messageFrom)
} catch(err) {
console.error(err)
}
推荐阅读
- gcc - 在stdlib.h和stdio.h下使用strtol()的结果不一样
- java - 为什么java在这个例子中更喜欢父类?
- spring-boot - angular 6如何通过zuul api动态消耗rest api?
- symfony - 使用 Doctrine Extensions Translatable 不返回任何记录
- python - 熊猫时间序列数据框图不在索引中
- amazon-web-services - aws ec2 配置中的 CIDR 安全组
- java - How to download images to computer from firebase
- wordpress - 每个 Slick Slider 有 4 个自定义帖子类型
- python - 如何计算一个热张量
- angular - 如何聚焦具有 ngif 的 TextArea