mongoose 通过UserId 获取用户信息,不能保存到对象
发布于 7 年前 作者 Youthink 3095 次浏览 来自 问答

我参照 Cnode 源码写的项目,但不知道哪里出问题了,根据 userid 查询的用户信息不能保存到对象里。

const ep = new eventproxy();
  ep.fail(next);

  EveryDay.getRankByTodayDate(TodayDate, ep.done('ranks'));

  ep.all('ranks', function(ranks){
    ranks.forEach(function(rank){
      User.getUserById(rank.userId, ep.done(function(user){
        rank.nickName = user.nickName; //这里不生效
        console.log(rank,rank.nickName); rank.nickName 有值,但是打印出的rank没有nickName 属性
        ep.emit('user');
      }))
    });
rank.nickName = user.nickName;

为什么直接这样赋值不生效那?这里应该怎么把查询到的用户昵称保存到数据对象里?

我看本站的源码就是直接赋值的,我遗漏了什么吗?麻烦大家,指点一下。

我在网上找到了这种解决方法,但是还是不懂本站的源码怎么处理的:

 EveryDay.find({TodayDate}).lean()
    .exec((err, ranks) => {
	...
	}
	)
11 回复

nickName 在model里有定义么? mongoose 如果model里没定义的话 是保存不进去的

我也感觉是 nickName 在 model 中未定义 @i5ting @imhered

@alsotang 1 2楼层层艾特 🤣😂

@i5ting @alsotang @imhered https://github.com/cnodejs/nodeclub/blob/master/proxy/topic.js#L96 这里的 topic.author model 里不是也没有定义 只有 author_id 是不是我理解错了?

@Youthink 这里是查询不是写入吧? 你看这个方法名 getTopicsByQuery

@imhered 对啊,这里不是把查询出来的用户信息 赋值给了 topic.author ?

@Youthink 哦,不好意思。我一开始没注意看。我理解成了写入了。 我只知道写入的话model中未定义是不行的。 读取我就不知道了。 实在不行构建一个新的object,把需要的东西给赋值进去吧

@i5ting @alsotang https://github.com/cnodejs/nodeclub/blob/master/proxy/topic.js#L96 这里的 topic.author model 里不是也没有定义 只有 author_id 是不是我理解错了?

@Youthink model未定义的字段 将查询出的entity toJSON一下

回到顶部