Node.js MongoDB 查询
在 MongoDB 中,我们使用 find 和 findOne 方法来查找集合中的数据。
这就像在 MySQL 数据库的表中查找数据时使用 SELECT 语句一样。
查找单个文档 (Find One)
要从 MongoDB 中的集合中选择数据,我们可以使用 findOne()
方法。
findOne()
方法返回选择中的第一个匹配项。
findOne()
方法的第一个参数是一个查询对象。在此示例中,我们使用一个空的查询对象,它会选择集合中的所有文档(但只返回第一个文档)。
示例
查找 customers 集合中的第一个文档
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").findOne({}, function(err, result) {
if (err) throw err;
console.log(result.name);
db.close();
});
});
运行示例 »
将上面的代码保存在一个名为 "demo_mongodb_findone.js" 的文件中并运行该文件。
运行 "demo_mongodb_findone.js"
C:\Users\您的名字>node demo_mongodb_findone.js
这将产生以下结果:
Company Inc.
查找所有文档 (Find All)
要从 MongoDB 中的表选择数据,我们也可以使用 find()
方法。
find()
方法返回选择中的所有匹配项。
find()
方法的第一个参数是一个查询对象。在此示例中,我们使用一个空的查询对象,它会选择集合中的所有文档。
在 find() 方法中不带参数与 MySQL 中的 SELECT * 效果相同。
示例
查找 customers 集合中的所有文档
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
将上面的代码保存在一个名为 "demo_mongodb_find.js" 的文件中并运行该文件。
运行 "demo_mongodb_find.js"
C:\Users\您的名字>node demo_mongodb_find.js
这将产生以下结果:
[
{ _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address: 'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael', address: 'Valley 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy', address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a , name: 'Betty', address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard', address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan', address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'William', address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'Chuck', address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway 1633'}
]
查找部分字段 (Find Some)
find()
方法的第二个参数是 projection
对象,它描述了结果中应包含哪些字段。
此参数是可选的,如果省略,则结果中将包含所有字段。
示例
返回 customers 集合中所有文档的 "name" 和 "address" 字段
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0, name: 1, address: 1 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
将上面的代码保存在一个名为 "demo_mongodb_find_fields.js" 的文件中并运行该文件。
运行 "demo_mongodb_find_fields.js"
C:\Users\您的名字>node demo_mongodb_find_fields.js
这将产生以下结果:
[
{ name: 'John', address: 'Highway 71'},
{ name: 'Peter', address: 'Lowstreet 4'},
{ name: 'Amy', address: 'Apple st 652'},
{ name: 'Hannah', address: 'Mountain 21'},
{ name: 'Michael', address: 'Valley 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Betty', address: 'Green Grass 1'},
{ name: 'Richard', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Vicky', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},
{ name: 'William', address: 'Central st 954'},
{ name: 'Chuck', address: 'Main Road 989'},
{ name: 'Viola', address: 'Sideway 1633'}
]
您不能在同一个对象中同时指定 0 和 1 值(除非其中一个字段是 _id 字段)。如果您指定一个值为 0 的字段,所有其他字段都将获得值 1,反之亦然。
示例
此示例将排除 "address" 字段的输出
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { address: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
要排除 _id 字段,您必须将其值设置为 0。
示例
此示例将只返回 "name" 字段
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0, name: 1 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
示例
此示例将产生与第一个示例相同的结果:返回所有字段,但排除 _id 字段。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
示例
如果您在同一个对象中同时指定 0 和 1 值(_id 字段除外),您会收到一个错误。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { name: 1, address: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
运行示例 »
结果对象
正如您从上面示例的结果中看到的,结果可以转换为一个数组,其中每个文档都是一个对象。
要返回例如第三个文档的地址,只需引用第三个数组对象的 address 属性。
示例
返回第三个文档的地址
console.log(result[2].address);
这将产生以下结果:
Apple st 652