MongoDB是一个基于分布式文件存储的NoSQL数据库,它以BSON(类似JSON)格式存储数据。文档是MongoDB中的基本数据单元,类似于关系型数据库中的行,但具有更灵活的结构。
// 连接到数据库
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'myDatabase';
MongoClient.connect(url, function(err, client) {
const db = client.db(dbName);
const collection = db.collection('myCollection');
// 查询所有文档
collection.find({}).toArray(function(err, docs) {
console.log(docs);
client.close();
});
// 带条件查询
collection.find({ name: 'John' }).toArray(function(err, docs) {
console.log(docs);
client.close();
});
});
collection.findOne({ age: { $gt: 30 } }, function(err, doc) {
console.log(doc);
client.close();
});
// 只获取name和age字段
collection.find({}, { projection: { name: 1, age: 1 } }).toArray(function(err, docs) {
console.log(docs);
client.close();
});
// 排除_id字段
collection.find({}, { projection: { _id: 0, name: 1 } }).toArray(function(err, docs) {
console.log(docs);
client.close();
});
collection.aggregate([
{ $match: { status: 'active' } },
{ $group: { _id: '$department', total: { $sum: '$salary' } } }
]).toArray(function(err, result) {
console.log(result);
client.close();
});
原因:
解决方案:
collection.countDocuments({})
检查集合中是否有文档解决方案: 使用点表示法访问嵌套字段:
// 假设文档结构为 { user: { name: 'John', address: { city: 'NY' } } }
collection.find({}, { projection: { 'user.name': 1, 'user.address.city': 1 } })
.toArray(function(err, docs) {
console.log(docs);
});
解决方案:
// 创建索引
collection.createIndex({ name: 1 });
// 限制返回数量
collection.find({}).limit(100).toArray(function(err, docs) {
console.log(docs);
});