Я очень новичок в MongoDB (только на прошлой неделе только начался интерес). Я пытаюсь что-то выяснить, и я не совсем уверен в том, что терминология будет искать его. Поэтому я решил задать вопрос.MongoDB: Выполнение действий на поле коллекции
Я создал коллекцию под названием Students
. Students
имеет поля id
, name
, undergrad
(который является логическим), classes
(который представляет собой массив) и units
(что в 3 раза превышает количество классов, которые имеет учащийся).
Теперь я хотел видеть, как я мог выполнять действия в определенном поле Students
. Я сделал это, вставил пару документов и целенаправленно не включил поле units
. И я хотел, чтобы $set
поле units
для каждого документа/студента, у которого не было поля. Я сделал следующее:
var studentDoc = db.students.find({units: {$exists:false}})
studentDoc.forEach(function(stu){
db.student.update({_id:stu._id}, {$set:{units:{$size:"$classes"}}})
}
)
Вопрос 1: Я сделал то, что я сделал, даже отдаленно исправил?
Вопрос 2: Когда я набираю studentDoc
после установки var studentDoc
, он ничего не печатает. Но когда я пишу
var studentDoc = db.students.find({units:{$exists:false}}).toArray()
он печатает studentDoc
как массив, но до сих пор, кажется, не делать ничего в цикле forEach
.
Вопрос 3: Как $set
в units
поле 3 * (размер классов массива)
Я надеюсь, что было ясно в моем вопросе. Я пробовал поиск в документах MongoDB и Google, но не имел никакой удачи (возможно, из-за отсутствия знаний для поиска правильных вещей).
Любая помощь будет замечательной! Вы можете даже указать мне в правильном направлении, и это будет здорово!
Заранее благодарю вас за помощь!
Спасибо за ваш ответ. У меня была пара вопросов и разъяснений, если вы не возражаете. 1) В вашем ответе studentDoc не является результатом .toArray(), правильно? 2) Использует ли [[классы]] после запроса извлечь это конкретное поле? 3) Я все еще путаюсь, когда использовать кавычки и когда использовать $. Если бы вы могли помочь мне или указать мне направление, объясняющее их использование, это было бы здорово! Еще раз спасибо! – Aashay
1) его не результат toArray(). 2) да. он будет извлекать только классы. 3) для таких функций, как set, addToSet, inc. вам нужно использовать $. как $ set, $ inc, $ addToSet. эти вещи вы будете изучать день ото дня. –
Я пробовал использовать код, который вы предоставили на studentDoc, но я продолжал получать ReferenceError: studentDoc не определен. Когда я добавил toArray() в инициализацию var studentDoc, ошибка исчезла, и ваш код работал отлично. Вы знаете, почему я получал ошибку, не используя .toArray()? – Aashay