使用mongoose处理$ in

时间:2013-01-25 23:16:03

标签: node.js mongodb express mongoose

这是代码:

usermodel.findOne({ user: req.session.user }, function (err, user){

   usermodel.find({ _id: {$in: user.follow } }, { user: true }, function (err, users){

         usermodel.find({ author: { $in: users.user }}, function (err, images){

          console.log(users);
          console.log(images);


        });
     });

这就是Schema:

var userschema = new mongoose.Schema({

  user: String,
  follow: [String],
  message: [{ 

              title: String,
              author: String,
              message: String

           }],

});

follow数组包含实际用户关注的用户的_id个。第一个usermodel.find y获取follow数组。使用第二个usermodel.find,我得到用户名:

[ { _id: 50fd9c7b8e6a9d087d000006, user: 'Mrmangado' },
  { _id: 50fd9d3ce20da1dd7d000006, user: 'kirbo' } ]

而且,对于第三个和最后一个usermodel.find,我正在尝试获取用户的消息。我在之前的usermodel.find中获取了用户的名称,并且消息的author与创建它的用户具有相同的值。问题是我得到用户名字的方式,我想我必须有这样的用户名字:

[{ user: 'Mrmangado' },
 { user: 'kirbo' }]

如果我收到这样的数组,$in语句将完美运行。有没有办法得到像这样的输出......?

谢谢你的进步!

1 个答案:

答案 0 :(得分:2)

你确定这是你想要的吗? author字段是用户名,而不是_id?如果是这样,您可以映射结果对象以获取名称。

var usernames = users.map(function(u) { return u.user; });
//= ["Mrmangado", "kirbo"]