如何只返回mongodb中字段的值

时间:2014-05-15 10:54:27

标签: javascript mongodb database nosql

在mongodb中应用find操作后,我得到以下文档列表..

  db.users.find(....)
我得到了:

 { "text" : "Hey" }
 { "text" : "Hi" }
 { "text" : "Hello" }
 { "text" : "yes" }

如何将其转换为

 ["Hey","Hi","Hello","yes"].

我试过

 db.users.find(...).map( function(u) { return "u.text"; } )

但它给出了错误!

5 个答案:

答案 0 :(得分:11)

不确定您的语言实现是什么,但基本概念是:

var result = []
db.users.find().forEach(function(u) { result.push(u.text) })

返回result的值为:

["Hey","Hi","Hello","yes"]

答案 1 :(得分:6)

首先db.users.find(...).map()无法正常工作,因为db.users.find(...)并没有为您提供真正的数组。

所以你首先需要转换为数组。

db.users.find(...).toArray()

然后如果你应用map()函数就行了

  db.users.find(...).toArray().map( function(u) { return u.text ; } )

另一个简单的技巧是使用.forEach()

这样就可以了解

var cursor = db.users.find(...); // returns cursor object which is a pointer to result set

var results = [];
cursor.forEach(
  function(row) {
     results.push(row.text);
  });

results //results will contain the values

答案 2 :(得分:2)

你可以使用

var u=db.users.find({...},{text:1,_id:0})
while(u.hasNext()){print(u.Next().text);}

答案 3 :(得分:2)

另一种选择是简单地使用distinct

db.users.distinct("first_name");

会返回:

[
  "John",
  "Jennifer",
  ...
]

答案 4 :(得分:0)

这里的正确答案是方法.distinct() (docs)

在你的情况下试试这样:

db.users.find(....).distinct('text')

那只会返回值。