Populate不起作用Mongoose(没有数据库插入)

时间:2014-05-01 16:01:48

标签: node.js mongodb mongoose

我遇到了一个大问题,我试图在Mongoose中使用模型关联,因为它会非常有用,但有些东西我不会...

让我们说用户模型的模式如...(等等)

user_geos : [{

  type: Mongo.Schema.ObjectId,
  ref: 'UserGeo',

}]

还有一个带有此架构的UserGeo模型......(其中包括)

_user: {

  type: Mongo.Schema.ObjectId,
  ref: 'User'

}

很简单,当我创建一个新的UserGeo时,它会自动将它添加到User中的user_geos数组中,对吗?

   user_geo_infos._user = user.id;

    db.UserGeo.create(user_geo_infos, function(error, user_geo) {

        catches.error(error);
        console.log(user_geo);

    });

我遇到的一个大问题是,当我创建它时,它会正确地填充" _user"数据库中UserGeo中的字段,但用户模型不会填充自身。数组保持空(" []")。一个细节,但你真正理解的是UserGeo有一个用户和用户有很多UserGeo。

我真的卡住了,我做错了吗?我到处检查过,现在读了10次Mongoose文档......

有什么想法吗?谢谢大家;)

2 个答案:

答案 0 :(得分:4)

  

很简单,当我创建一个新的UserGeo时,它会自动将它添加到User中的user_geos数组中,对吗?

不。这里的魔法/自动化东西比你希望的少得多。 Mongodb以及猫鼬只会一次只对一个系列采取行动。这将在您加载记录并使用mongoose .populate帮助程序时自动进行查询,但它不能帮助您跨集合进行编写。

答案 1 :(得分:0)

好的,我尝试手动制作,但它很有效,但我很失望......看起来像这样......

    db.UserGeo.create(user_geo_infos, function(error, user_geo) {

        db.User.findOne(user.id, function(error, user) { 

            catches.error(error);

            user.user_geos.push(user_geo.id);
            user.save();

        });

        catches.error(error);
        console.log(user_geo);

    });

创建UserGeo后,我获取用户,然后将新数据推送到用户字段...

这是解决方案很重,也许让一些助手会让它更轻..无论如何,谢谢:)