#node.js #mongodb #express #mongoose
Вопрос:
// database: db.getCollection('users').find({})
{
"_id" : ObjectId("60af81e943d991265c2b8746"),
"email" : "test@gmail.com.com",
"password" : "123456",
"notes" : [
{
"_id" : ObjectId("60af81e943d991265c2b8747"),
"title" : "test title",
"content" : "test content"
}
],
"__v" : 0
}
// userSchema
const userSchema = new mongoose.Schema({
email: String,
password: String,
notes: [{ title: String, content: String }],
});
///////////////////////////////////////////////////////////////////////////////////
app.post("/save", function (req, res) {
const idNote = req.body._id;
const userID = req.user._id;
User.findById({ _id: userID }, function (err, foundUser) {
if (err) {
console.log(err);
} else {
const notesArray = foundUser.notes;
}
}
console.log(notesArray);
})
});
Итак, есть ли способ получить конкретные (примечания._id внутри пользователя._id) и использовать его для запроса документа(чтобы я мог найти конкретную «заметку» внутри пользователя) или единственный способ, которым работает запрос, — это поиск коллекции, в которой единственные реквизиты, которые можно использовать для запроса документа, находятся внутри схемы?
Если я тогда прав…
const newTitle = req.body.title;
const newContent = req.body.content;
const userID = req.user._id;
User.findById({ _id: userID }, function (err, foundUser) {
if (err) {
console.log(err);
} else {
const notesArray = foundUser.notes;
const note = findNote(editNote, notesArray);
function findNote(editNote, notesArray) {
for (let i = 0; i < notesArray.length; i ) {
if (notesArray[i]._id == editNote) {
return notesArray[i];
} else {
console.log("not found!");
}
}
}
console.log(note);
}
});
Как я могу удалить «заметку», которую мне нужно отредактировать, а затем создать НОВУЮ ВЕСЬ остальной массив и в итоге вставить новый массив заметок в схему «заметки»:[],
{
"_id" : ObjectId("60af81e943d991265c2b8746"),
"email" : "test@gmail.com.com",
"password" : "123456",
"notes" : --> HERE <--,
"__v" : 0
}
Ответ №1:
Если я правильно понимаю ваш вопрос, вы хотите добавить/удалить/отредактировать note
объект в notes
массиве определенного пользовательского свойства. Вы можете выполнить любое из них всего одним запросом.
Добавить новый элемент
Если вы хотите добавить новый элемент в notes
массив для определенного пользователя, вы можете сделать это с $push
помощью оператора, например:
db.collection.update({
"_id": "user_1"
},
{
"$push": {
"notes": {
"_id": "note_5",
"title": "test title",
"content": "test content"
}
}
})
Вот рабочий пример: https://mongoplayground.net/p/AvRjSKZxNt7
Удалить элемент
Если вы хотите удалить элемент из notes
массива для определенного пользователя, вы можете сделать это с помощью $pull
оператора, например:
db.collection.update({
"_id": "user_1"
},
{
"$pull": {
"notes": {
"_id": "note_4"
}
}
})
Вот рабочий пример: https://mongoplayground.net/p/M_gS2T00PDS
Изменить элемент
Если вы хотите отредактировать элемент из notes
массива для определенного пользователя, вы можете сделать это с помощью
позиционный оператор»$», вот так:
db.collection.update({
"_id": "user_1",
"notes._id": "note_4"
},
{
"$set": {
"notes.$.title": "This is new title"
}
})
Вот рабочий пример: https://mongoplayground.net/p/Gn9R5u2rBJd