2017-02-23 53 views
0

Хотелось бы, если возможно обновить поле всех документов в коллекции со ссылкой на другой документ. Я пытался сделать это с помощью кода ниже:MongoDB - Обновить поле со ссылкой на другой документ

var project = db.Project.find({slug:"engine"}); 

db.Activity.update({}, {$set:{'project':DBRef("Project", project._id, "mydb")}}); 

Когда я смотрю на активность документов, в поле «проекта», результат:

{ 
    _id: ObjectId("..."), 
    "project": DBRef("Project", undefined, "mydb") 
} 

Есть ли способ сделать это правильно?

Заранее спасибо.

+0

Целью базы данных NoSQL (MongoDB) является отсутствие отношений между коллекциями, базами данных или документами. –

+0

Спасибо за ваш комментарий @AnnaJeanine. Я знаю, что это не цель, но мне нужно сделать это по причинам, не зависящим от меня. – Airam

+0

Хорошо. Вы хотите ссылаться на один документ? Потому что в запросе вы могли получить несколько значений в 'var project' –

ответ

0

Кажется, у вас есть проблема с вызовом обещания. Вы можете решить эту проблему двумя способами:

Вариант один: Поместите функцию в зависимости от вашего возвращения данных внутри обратного вызова первой функции, например:

db.Project.find({slug:"engine"}, function(error, data) { 
    db.activity.update(...data.Id...); 
}); 

Вариант два: Ждать возвращения

var project = db.Project.find({slug:"engine"}); 

project.then(function(error,data) { 
     db.activity.update(...project.Id...); 
}); 

Оба должны работать. Проблема в том, что когда вы делаете первый звонок, он возвращает обещание, а не само значение. Если вы делаете путаницы на эту тему, вы можете посмотреть по адресу:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Надеюсь мой ответ помог вам.

Смежные вопросы