我正在使用node.js / express,我有一个Mongodb来存储一些数据集。在网页上,用户可以输入,编辑和删除数据(一切正常)。例如,要添加数据,我有以下代码:
router.post('/addset', function(req,res) {
var db = req.db;
var collection = db.get('paramlist');
collection.insert(req.body, function(err, result){
res.send(
(err === null) ? { msg: '' } : { msg: err }
);
});
});
在我的app.js文件中,我包含了行
// Database
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/paramSet1');
以及
app.use(function(req,res,next){
req.db = db;
next();
});
使数据库可以在其余代码中访问(遵循本教程:http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/,我是初学者)。
所以这一切都很好。我的问题如下:如果数据库中已存在具有相同名称的数据集并向用户发送消息,我想添加测试。在这个回答后How to query MongoDB to test if an item exists?我尝试使用collection.find.limit(1).size()但我收到了错误
undefined is not a function
我尝试了以下事情。在上面的成本(router.post)我尝试在行var收集后添加...
var findValue = collection.find({name:req.body.name});
如果我然后执行console.log(findValue),我会得到一个巨大的输出JSON。然后我尝试了console.log(findValue.next())但是我得到了同样的错误(undefined不是函数)。我也试过
collection.find({name:req.body.name}).limit(1)
以及
collection.find({name:req.body.name}).limit(1).size()
但也会收到此错误。总而言之,collection.insert,collection.update和collection.remove都可以工作,但find()却没有。另一方面,当我进入mongo shell时,命令工作正常。
我会对任何提示和想法表示感谢。
编辑: console.log(findValue)的输出是:
{ col:
{ manager:
{ driver: [Object],
helper: [Object],
collections: [Object],
options: [Object],
_events: {} },
driver:
{ _construct_args: [],
_native: [Object],
_emitter: [Object],
_state: 2,
_connect_args: [Object] },
helper: { toObjectID: [Function], isObjectID: [Function], id: [Object] },
name: 'paramlist',
col:
{ _construct_args: [],
_native: [Object],
_emitter: [Object],
_state: 2,
_skin_db: [Object],
_collection_args: [Object],
id: [Object],
emitter: [Object] },
options: {} },
type: 'find',
opts: { fields: {}, safe: true },
domain: null,
_events: { error: [Function], success: [Function] },
_maxListeners: undefined,
emitted: {},
ended: false,
success: [Function],
error: [Function],
complete: [Function],
resolve: [Function],
fulfill: [Function],
reject: [Function],
query: { name: 'TestSet1' } }
答案 0 :(得分:3)
find
会返回cursor,而不是匹配的文档本身。但更适合您的情况是使用findOne
:
collection.findOne({name:req.body.name}, function(err, doc) {
if (doc) {
// A doc with the same name already exists
}
});
答案 1 :(得分:0)
首先看起来不对的是你的语法对于find是不正确的。您需要将其称为函数。尝试:
collection.find({name:req.body.name}).limit(1).size();
答案 2 :(得分:0)
如果您在该网站http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/上使用该方法 您必须更改代码
collection.find({name:req.body.name}).limit(1)
并像这样使用它
collection.find({name:req.body.name},{limit:1})
,如果要添加更多选项 这样做
collection.find({name:req.body.name},{limit:1,project:{a:1},skip:1,max:10,maxScan:10,maxTimeMS:1000,min:100})
您可以在这里http://mongodb.github.io/node-mongodb-native/2.0/api/Cursor.html
中找到所有内容答案 3 :(得分:0)
您可以那样使用
app.get('/', (req, res) => {
db.collection('quotes').find().toArray((err, result) => {
console.log(result);
})
})