Mongoose 和 mongoDB - 重复键错误
Mongoose and mongoDB - duplicate key error
我正在尝试将 MongoDB 和 mongoose 用于我的小型对话应用程序,其中每个用户都有自己的对话应用程序 collection 但是我在保存新对话时遇到错误:
错误:MongoError:insertDocument :: 由 :: 11000 E11000 重复键错误索引:chat.privatemessages.$id 重复键:{ : ObjectId('54f1a39ff467833f7e794636') }
我的架构:
var chatPrivateMessagesSchema = mongoose.Schema({
user: String,
with:[{
conversation_with: String,
messages:[{
text:String,
created: {type: Date, default: Date.now}
}]
}]
});
var PrivateMessages = mongoose.model('PrivateMessages', chatPrivateMessagesSchema);
保存新对话的方法:
socket.on ('chat', function (from, to, message, callback) {
PrivateMessages.find ({}, function (err, users) {
if (err) throw err;
for (var i = 0; i < users.length; i++) {
if (users[i].user == from) {
var newPrivateMsg = new PrivateMessages ({_id: users[i]._id}, {
with: [{
conversation_with: to, //if conversation with "to" user does not exist create a new entry
messages: [{
text: message, //append a new message
created: {type: Date, default: Date.now}
}]
}]
});
newPrivateMsg.save (function (err) {
if (err) throw err;
});
}
}
});
});
所以基本上我正在寻找的输出应该是这样的?
{
"_id": "some id",
"user": "John",
"with": [{
"conversation_with": "Maria",
"_id": "some id",
"messages": [{
"text": "Hellomyfisrtmessage",
"created": "somedate"
}, {
"text": "Secondmessage ",
"created": "somedate"
}, {
"text": "Thirdmessage",
"created": "somedate"
}, ]
}, {
"conversation_with": "Peter",
"_id": "some id",
"messages": [{
"text": "Hellomyfisrtmessage",
"created": "somedate"
}, {
"text": "Secondmessage ",
"created": "somedate"
}, {
"text": "Third message",
"created": "some date"
},
]
}],
}
我真的很纠结如何插入一个新条目:(有人能帮忙吗?
问题是您将每个 PrivateMessage _id 设置为用户的 _id,不要那样做!
编辑:
socket.on ('chat', function (from, to, message, callback) {
PrivateMessages.find ({}, function (err, users) {
if (err) throw err;
for (var i = 0; i < users.length; i++) {
if (users[i].user == from) {
users[i].with.forEach(function(with){
if (with.conversation_with === to ){
// append new message
with.messages.push({
text: message,
created: { type: Date, default: Date.now }
})
}
})
users[i].save (function (err) {
if (err) throw err;
});
}
}
});
});
我正在尝试将 MongoDB 和 mongoose 用于我的小型对话应用程序,其中每个用户都有自己的对话应用程序 collection 但是我在保存新对话时遇到错误:
错误:MongoError:insertDocument :: 由 :: 11000 E11000 重复键错误索引:chat.privatemessages.$id 重复键:{ : ObjectId('54f1a39ff467833f7e794636') }
我的架构:
var chatPrivateMessagesSchema = mongoose.Schema({
user: String,
with:[{
conversation_with: String,
messages:[{
text:String,
created: {type: Date, default: Date.now}
}]
}]
});
var PrivateMessages = mongoose.model('PrivateMessages', chatPrivateMessagesSchema);
保存新对话的方法:
socket.on ('chat', function (from, to, message, callback) {
PrivateMessages.find ({}, function (err, users) {
if (err) throw err;
for (var i = 0; i < users.length; i++) {
if (users[i].user == from) {
var newPrivateMsg = new PrivateMessages ({_id: users[i]._id}, {
with: [{
conversation_with: to, //if conversation with "to" user does not exist create a new entry
messages: [{
text: message, //append a new message
created: {type: Date, default: Date.now}
}]
}]
});
newPrivateMsg.save (function (err) {
if (err) throw err;
});
}
}
});
});
所以基本上我正在寻找的输出应该是这样的?
{
"_id": "some id",
"user": "John",
"with": [{
"conversation_with": "Maria",
"_id": "some id",
"messages": [{
"text": "Hellomyfisrtmessage",
"created": "somedate"
}, {
"text": "Secondmessage ",
"created": "somedate"
}, {
"text": "Thirdmessage",
"created": "somedate"
}, ]
}, {
"conversation_with": "Peter",
"_id": "some id",
"messages": [{
"text": "Hellomyfisrtmessage",
"created": "somedate"
}, {
"text": "Secondmessage ",
"created": "somedate"
}, {
"text": "Third message",
"created": "some date"
},
]
}],
}
我真的很纠结如何插入一个新条目:(有人能帮忙吗?
问题是您将每个 PrivateMessage _id 设置为用户的 _id,不要那样做!
编辑:
socket.on ('chat', function (from, to, message, callback) {
PrivateMessages.find ({}, function (err, users) {
if (err) throw err;
for (var i = 0; i < users.length; i++) {
if (users[i].user == from) {
users[i].with.forEach(function(with){
if (with.conversation_with === to ){
// append new message
with.messages.push({
text: message,
created: { type: Date, default: Date.now }
})
}
})
users[i].save (function (err) {
if (err) throw err;
});
}
}
});
});