gpt4 book ai didi

javascript - 分配属性值在 Mongoose 中不起作用

转载 作者:行者123 更新时间:2023-12-02 18:09:53 25 4
gpt4 key购买 nike

我的查询是:

db.Room.find({}, function (err, rooms) {
if (!err) {
async.each(rooms, function (room, done) {
db.User.find({}, function (err, users) {
if (err) {
done(err)
} else {
room.users = users
room._name = room.name
done()
}
})
}, function (err) {
if (!err) {
socket.emit('read:rooms', rooms)
}
})
}
})

架构是:

房间:

var mongoose = require('mongoose')
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var Room = new Schema({
name: String
});

module.exports = Room

用户:

var mongoose = require('mongoose')
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var User = new Schema({
email: String
});

module.exports = User

但在前端:

  socket.on('read:rooms', function (rooms) {
$scope.rooms = rooms
})

但是rooms没有users属性,请帮助我

最佳答案

这是因为 Rooms 架构没有 users 属性。

因此,有几种方法可以解决这个问题。因为看起来您希望 users 属性实际上不是架构的一部分,并且是客户端连接而不是在数据库上完成的工作(这是一个很好!),我建议您在通过套接字发送数据时将其转换为普通的旧 JavaScript 对象(无论如何,这都会发生,您只是提前做了一点)。

所以,当find返回时,它实际上返回一个完全实现的MongooseJS模型对象。虽然您可以在对象实例上设置动态属性,但它们不是模型“数据”的一部分,因此当稍后将其序列化到客户端时,只有记录的属性才可用。

所以,这是我建议的一个例子:

db.Room.find({}, function (err, rooms) {
if (!err) {
var oRooms = [];
async.each(rooms, function (room, done) {
/* etc. your code */

} else {
var oRoom = room.toObject();
oRoom.users = users
oRoom._name = room.name
oRooms.push(oRoom);
done()
}

此技术将使用 toObject functionality模型返回 JavaScript 对象(不是 Mongoose 模型)。这样,您就可以对对象执行您想要的操作,包括动态添加新属性。

当然,稍后请确保将新的房间数组发送给客户端:

 if (!err) {
socket.emit('read:rooms', oRooms)
}

关于javascript - 分配属性值在 Mongoose 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794518/

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