gpt4 book ai didi

node.js - 如何在 Mongoose 中设置 objectId 属性?

转载 作者:可可西里 更新时间:2023-11-01 10:34:45 25 4
gpt4 key购买 nike

我有一个名为 Message 的模式,如下所示;

Message = new Schema({
id: Number,
sender: ObjectId,
receiver: ObjectId,
date: Date,
content: String,
type: Number
});

以及如下所示的用户架构;

User = new Schema({
id: Number,
username: String,
isOnline: Boolean
});

我想在收到新消息时设置消息项的发送者和接收者属性。收到消息后,我将创建一个新的消息文档并设置其属性。但我不知道如何设置发送者和接收者属性(应该是对用户文档中实体的引用)。我正在使用的代码如下所示。你可以随心所欲地判断代码,这就是我想要的。我不知道摆脱它的正确方法。但似乎不是这个。当我使用下面的代码时,我看不到设置了发送者和接收者属性。我认为可能是因为 findOne 是异步的(我不知道是不是)。

var m = new Message();
m.content = messageData.text;
m.id = messageId;
User.findOne({id: socket.userId}, function (e, o) {
m.sender = o;
});

User.findOne({id: messageData.userId}, function (e, o) {
m.receiver = o;
});

m.save(function (e) {
if (!e) {
console.log("message is saved to the mongodb...");
}
});

如果您能说出正确的方法,那就太好了。

提前致谢。

最佳答案

你快到了。你是正确的,findOne 是异步的。您只需要处理他们的回调并在他们都响应后保存消息。这是您可以使用的典型模式:

var m = new Message();
m.content = messageData.text;
m.id = messageId;
User.findOne({id: socket.userId}, function (e, o) {
if (e) return handleError(e); // assuming you want to handle errors somehow
m.sender = o;
m.sender && m.receiver && save();
});

User.findOne({id: messageData.userId}, function (e, o) {
if (e) return handleError(e); // assuming you want to handle errors somehow
m.receiver = o;
m.sender && m.receiver && save();
});

function save () {
m.save(function (e) {
if (e) return handleError(e);
console.log("message is saved to the mongodb...");
});
}

关于node.js - 如何在 Mongoose 中设置 objectId 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com