【发布时间】:2019-10-26 16:50:12
【问题描述】:
我正在编写自己的 CLI,它使用 mongoose 对 MongoDB 数据库执行一些操作。
除了query 对象不是{} 之外,一切正常,尽管存在文档,但我没有得到任何结果。请参阅下面的示例。
const program = require('commander');
const mongoose = require('mongoose');
const jsonParser = require('../helpers/json-parser');
program
.command('get <collection>')
.option('-q,--query <query>', 'MongoDB query object', jsonParser)
.option('-qo,--query-options [query-options]', 'MongoDB query options object', jsonParser)
.description('Returns documents from a MongoDB collection')
.action(action);
program.parse(process.argv);
function action(collection, options) {
let db;
mongoose.connect('<my-mongo-url>', { useNewUrlParser: true }).then(() => {
db = mongoose.connection.db;
console.log(options.query);
return db.collection(collection).find(options.query, options.queryOptions).toArray().then((docs) => {
console.log(docs);
mongoose.disconnect();
});
})
.catch((err) => {
if (db) {
mongoose.disconnect();
}
});
}
运行$ my-cli get users -q '{}' 会得到以下结果:
[ { _id: 5cfe593b3bb7cb82644651f0, 电子邮件:'foobar@gmail.com', 创建于:2019-06-10T13:20:59.784Z, 更新时间:2019-06-10T13:20:59.784Z, 角色:'用户', __v: 0 } ]
运行$ my-cli get users -q '{"_id": "5cfe593b3bb7cb82644651f0"}' 会得到以下结果:
[]
运行$ my-cli get users -q '{"limit": 1}' 会得到以下结果:
[]
运行 $ my-cli get users -q '{"skip": 0}' 会得到以下结果:
[]
我什至尝试直接在代码中执行db.collection(collection).find({_id: "5cfe593b3bb7cb82644651f0"}),但它仍然只给我一个空数组。
我希望所有这些查询都输出相同的内容,但事实并非如此。这是为什么呢?
【问题讨论】: