如何从Mongodb + Express.js中的集合中将所有userId作为列表进行检索?

时间:2016-07-18 17:51:47

标签: node.js mongodb express

我正在使用https://github.com/mongodb/node-mongodb-native?_ga=1.224176859.1706529023.1457418359 对于我的node.js项目。我需要从Mongo集合(用户)获取所有用户ID(作为列表)。是否有可能从给定的Mongo驱动程序本身做到这一点?

这是我的代码:

MongoClient.connect(mongoUrl, function(err, db) {
          if (err) {
              throw err;
              return res.status(400).send(err);
          }

          db.collection('user').find({},{'password': false}).toArray(function(err, result) {
              if (err) {
                  throw err;
                  return res.status(400).send(err);
              }
              console.log(result);
              return res.status(200).send(result);
          });
      });

用户集合

{
    "_id" : ObjectId("5789c80733118ab81b661160"),
    "username" : "",
    "firstName" : "Test",
    "lastName" : "",
    "userId" : 404040,
    "address" : "test address",
    "phoneNumber" : 1120202000,
    "isActive" : true,
    "subscriptionIdList" : [ 
        2220, 
        22252, 
        6526, 
        70505
    ],
    "password" : "",
    "createdAt" : "2016­06­21T11:22:11.089Z",
    "updatedAt" : "2016­07­21T11:22:11.089Z",
    "lastSubscribedAt" : ""
}

2 个答案:

答案 0 :(得分:1)

尝试使用_.map()

var _ = require('lodash');

db.collection('user').find({}, {_id: 0, userId: 1}).toArray(function (err, result) {
  if (err) {
    throw err;
    return res.status(400).send(err);
  }
  var userIds = _.map(result, 'userId');
  console.log(userIds);
  return res.status(200).send(userIds);
});

在项目上运行npm install --save lodash后。

答案 1 :(得分:1)

更优雅的方法是在集合中简单地使用mongo的 distinct 方法。这将查找单个集合中指定字段的不同值,并以数组形式返回结果。

以下说明如何将其应用于您的案例:

A