mongoose заполняет динамически привязанные субдокументы по базам данных [дубликат]

Это потому что, когда вы извлекаете данные из Firebase, вызов является асинхронным. Что вы можете сделать:

Вариант 1 - Установите логику внутри закрытия (например, что у вас есть, напечатайте var внутри закрытия).

Вариант 2 - Определите свое закрытие, которое получая ваши данные, такие как:

func myMethod(success:([String])->Void){

    ref?.observeEventType(.Value, withBlock: { snapshot in
        var newNames: [String] = []
        for item in snapshot.children {
            if let item = item as? FIRDataSnapshot {
                let postDict = item.value as! [String: String]
                newNames.append(postDict["name"]!)
            }
        }
        success(newNames)
    })
}

Вариант 3 - Использовать шаблон делегата

protocol MyDelegate{
     func didFetchData(data:[String])
}

class MyController : UIViewController, MyDelegate{

    func myMethod(success:([String])->Void){
        ref?.observeEventType(.Value, withBlock: { snapshot in
           var newNames: [String] = []
           for item in snapshot.children {
               if let item = item as? FIRDataSnapshot {
                   let postDict = item.value as! [String: String]
                   newNames.append(postDict["name"]!)
               }
            }
            self.didFetchData(newNames)
        })
    }

    func didFetchData(data:[String]){
        //Do what you want
    }

}
2
задан marc_s 23 February 2016 в 08:59
поделиться

1 ответ

Пополнение Mongo-документов через базы данных добавлено с mongoose v3.9.0. За это через db populate test вы должны указать другое имя db, когда вызывается model. Некоторые примеры кода, как показано ниже. Более подробную информацию см. В тестовых кодах в ссылке.

var app_DB = mongoose.createConnection(APP_DB_URI);
var name_DB = app_DB.useDb(config.NAME_DB); // 'name_db'

// ...
module.exports = app_DB.model('Account', schema);

// ...
module.exports = name_DB.model('Name', schema);

Начать

.populate('name', '', Name)
2
ответ дан CENT1PEDE 19 August 2018 в 08:53
поделиться
  • 1
    Я сделал то же самое. Но население все еще не работает. – CENT1PEDE 23 February 2016 в 09:55
  • 2
    С какими параметрами я должен положиться на .populate() после этого? .populate('name') теперь работает. – CENT1PEDE 23 February 2016 в 10:06
  • 3
    Я понял. .populate('name', '', Name) первым является ссылочным ключом, я не понимаю, что такое второй параметр, поэтому я просто оставляю его ' ', тогда 3-я ссылочная модель – CENT1PEDE 23 February 2016 в 10:16
  • 4
    @TheGreenFoxx, см. Этот doc , второй параметр - [select] <Object, String> Field selection for the population query – zangw 23 February 2016 в 10:17
Другие вопросы по тегам:

Похожие вопросы: