node.js - MongoDB Node.js 客户端投影
问题描述
我知道这可能是一个明显的问题,但我是 Mongo 的新手,在查看文档和示例时找不到我做错了什么......我正在尝试查询 mongo 中的记录列表以提取特定字段他们每个人的价值,我目前拥有。
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'TestDB';
let db = null;
let books = null;
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
if (err) {
console.error("Connection Failed")
}
db = client.db(dbName);
books = db.collection('books')
books.find( {}, { Name:1 } ).toArray().then(console.log)
});
但它打印出来
[ { _id: 5b5fae79252d63309c908522,
Name: 'TestBook',
chapters: { '1': [Object] } } ]
代替
[ {Name: 'TestBook'} ]
解决方案
我认为您需要projection
在 options 参数中提供才能仅获取该字段name
:
books.find({}, { projection: { Name:1 }})
.toArray()
.then(console.log)
实际上,find
有两个参数,第一个是查询条件,第二个包含一些选项。您可以在此处查看支持的选项字段:http: //mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#find
更新:对于mongodb
包版本 < 3.0。使用fields
代替projection
:books.find({}, { fields: { Name:1 }})
推荐阅读
- azure - 使用 MSAL.NET 获取不记名令牌以使用 EasyAuth 访问应用服务
- c# - 自定义 Datagridview 分页
- validation - 来自 IEnumerable 的 ASP MVC5 ModelState.Remove("myField")
- c - C获取用户输入的安全且正确的方法
- openapi - 在 Open API 中处理端点版本
- pine-script - 寻找一种简洁的方式来描述一个声明以避免收到该消息
- omnet++ - 在发布模式下运行 OMNeT++ 仿真
- sql - 在postgresql中将百分比(字符串,带%)转换为小数
- flutter - Flutter : Timer.periodic 在每次迭代中运行多次
- mysql - 具有内部联接的 SQL 复杂查询以及介于两者之间的位置