Node.js 如何使用nodejs插入和更新数据库中的现有数据?
我已经创建了消息模式和会话模式。我无法理解为什么我不能将数据存储在mongodb中 messageschema.js:Node.js 如何使用nodejs插入和更新数据库中的现有数据?,node.js,mongodb,Node.js,Mongodb,我已经创建了消息模式和会话模式。我无法理解为什么我不能将数据存储在mongodb中 messageschema.js: const mongoose = require('mongoose'); const Schema = mongoose.Schema; // Create Schema const MessageSchema = new Schema({ author: { type: String, required: true, }, message: {
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const MessageSchema = new Schema({
author: {
type: String,
required: true,
},
message: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Message', MessageSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const ConversationSchema = new Schema({
user1: {
type: String,
required: true
},
user2: {
type: String,
required: true
},
conversations : [{ type: Schema.Types.ObjectId, ref: 'Message' }]
});
module.exports = mongoose.model('Conversation', ConversationSchema);
conversationschema.js:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const MessageSchema = new Schema({
author: {
type: String,
required: true,
},
message: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Message', MessageSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const ConversationSchema = new Schema({
user1: {
type: String,
required: true
},
user2: {
type: String,
required: true
},
conversations : [{ type: Schema.Types.ObjectId, ref: 'Message' }]
});
module.exports = mongoose.model('Conversation', ConversationSchema);
server.js:
let db = mongoose.connection;
var user1, user2;
db.once('open', function() {
console.log("Database is now connected");
let io = socket(server);
io.on("connection", function(socket){
console.log("Socket Connection Established with ID :"+ socket.id)
socket.on('disconnect', function(){
console.log('User Disconnected');
});
let chat = db.collection('chat');
let conversation = db.collection('conversation');
socket.on('GET_USER', function (data) {
console.log(data);
user1 = data.user2;
});
socket.on('LOGGEDIN_USER', function(data) {
console.log(data);
user2 = data.user1;
});
socket.on('SEND_MESSAGE', function(data){
let author = data.author;
let message = data.message;
let date = data.date;
// Check for name and message
if(author !== '' || message !== '' || date !== ''){
// Insert message
chat.insert({author:author, message: message, date:date}, function(){
io.emit('RECEIVE_MESSAGE', [data]);
});
conversation.findOneAndUpdate(
{ user1 : user1, user2: user2 },
{ conversations : { $push : { author, message, date } } },
{ upsert : true}
);
}
});
在server.js中,我想在对话(对话是一个数组)中添加消息,并在对话集合中添加user1和user2(user1,user2是字符串)。因此,如果未在user1和user2之间创建对话,则创建新对话并将其存储在集合中。如果存在上一次聊天,即对话中存在消息,则只需将消息推送到对话数组中即可。我已经在上面的server.js中实现了它,但并没有将文档插入到对话集合中。文档仅添加到聊天室集合中 您未正确使用
findOneAndUpdate
功能。第二个论点是不正确的。请查看mongoDB文档()以了解如何正确使用它。在那里,你可以找到
参数:更新
类型:文档说明:要应用的修改。 使用更新运算符,如
$set
、$unset
或$rename
。
使用update参数的field:value的update()模式会引发错误
您未正确使用
findOneAndUpdate
函数。第二个论点是不正确的。请查看mongoDB文档()以了解如何正确使用它。在那里,你可以找到
参数:更新
类型:文档说明:要应用的修改。 使用更新运算符,如
$set
、$unset
或$rename
。
使用update参数的field:value的update()模式会引发错误
你可以像下面这样试试
$push:{conservations:}
范例
conversation.findOneAndUpdate(
{ user1 : user1, user2: user2 },
{ $push : {conversations : { author : 'author',message : 'message',date : 'date' }}},
{ upsert : true}
);
你可以像下面这样试试
$push:{conservations:}
范例
conversation.findOneAndUpdate(
{ user1 : user1, user2: user2 },
{ $push : {conversations : { author : 'author',message : 'message',date : 'date' }}},
{ upsert : true}
);
为什么需要$set?如果对话数组不是空的,我只想从messageschema推送消息。如果为空,则插入新文档,即消息。注意:我在对话中使用refschema@funjoker
$set
是必需的,因为findOneAndUpdate()
需要它作为其语法的一部分。您希望设置字段的值,因此需要在此字段中使用$set
。如文档页面中所述,除了$set
之外,您还可以在为什么需要$set中使用$unset
、$rename
或任何其他运算符?如果对话数组不是空的,我只想从messageschema推送消息。如果为空,则插入新文档,即消息。注意:我在对话中使用refschema@funjoker$set
是必需的,因为findOneAndUpdate()
需要它作为其语法的一部分。您希望设置字段的值,因此需要在此字段中使用$set
。如文档页面中所述,除了$set
之外,您还可以在