如何在mongodb中只返回字段的值

uqxowvwt  于 2022-12-12  发布在  Go
关注(0)|答案(6)|浏览(232)

在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"; } )

但它正在给出错误!

4urapxun

4urapxun1#

一开始,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
thigvfpy

thigvfpy2#

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

db.users.distinct("first_name");

将返回:

[
  "John",
  "Jennifer",
  ...
]
0ejtzxu1

0ejtzxu13#

您可以使用

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

kxxlusnw4#

正确答案是.distinct()(docs)方法
在您的情况下,请尝试以下操作:

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

只会传回值。

fcipmucu

fcipmucu5#

最好的方法是:

db.users.distinct("text");

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

您将在此处获得有关此主题的更多信息:mongodb distinct

hi3rlvi2

hi3rlvi26#

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

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

result的返回值为:

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

相关问题