如何只返回mongodb中字段的值

sha*_*ank 11 javascript database mongodb nosql

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

  db.users.find(....)
Run Code Online (Sandbox Code Playgroud)

我有:

 { "text" : "Hey" }
 { "text" : "Hi" }
 { "text" : "Hello" }
 { "text" : "yes" }
Run Code Online (Sandbox Code Playgroud)

我怎么能把它转换成

 ["Hey","Hi","Hello","yes"].
Run Code Online (Sandbox Code Playgroud)

我试过了

 db.users.find(...).map( function(u) { return "u.text"; } )
Run Code Online (Sandbox Code Playgroud)

但它给出了错误!

Nei*_*unn 12

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

var result = []
db.users.find().forEach(function(u) { result.push(u.text) })
Run Code Online (Sandbox Code Playgroud)

返回的值result是:

["Hey","Hi","Hello","yes"]
Run Code Online (Sandbox Code Playgroud)


moh*_*ias 7

起初 db.users.find(...).map()没有用,因为db.users.find(...)没有给你一个真正的数组.

所以你需要先转换为数组.

db.users.find(...).toArray()
Run Code Online (Sandbox Code Playgroud)

然后,如果你应用map()函数将工作

  db.users.find(...).toArray().map( function(u) { return u.text ; } )
Run Code Online (Sandbox Code Playgroud)

另一个简单的技巧是使用.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
Run Code Online (Sandbox Code Playgroud)


小智 6

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

db.users.distinct("first_name");
Run Code Online (Sandbox Code Playgroud)

会返回:

[
  "John",
  "Jennifer",
  ...
]
Run Code Online (Sandbox Code Playgroud)