53 lines
1.1 KiB
JavaScript
53 lines
1.1 KiB
JavaScript
const {MongoClient, ObjectID} = require('mongodb')
|
|
const client = new MongoClient()
|
|
const params = {id: process.argv[2]}
|
|
|
|
client.connect('mongodb://localhost:27017/quotes', ready)
|
|
|
|
function ready (err, db) {
|
|
if (err) throw err
|
|
const collection = db.collection('quotes')
|
|
|
|
if (!params.id) {
|
|
showIds(collection, db)
|
|
return
|
|
}
|
|
|
|
vote(params.id, db, collection)
|
|
}
|
|
|
|
function showIds (collection, db) {
|
|
collection.find().each((err, doc) => {
|
|
if (err) throw err
|
|
if (doc) {
|
|
console.log(doc._id, doc.quote)
|
|
return
|
|
}
|
|
db.close()
|
|
})
|
|
}
|
|
|
|
function vote (id, db, collection) {
|
|
const query = {
|
|
_id: ObjectID(id)
|
|
}
|
|
const action = {$inc: {votes: 1}}
|
|
const opts = {safe: true}
|
|
collection.update(query, action, opts, (err) => {
|
|
if (err) throw err
|
|
console.log('1 vote added to %s by %s', params.id)
|
|
const by = {votes: 1}
|
|
const max = 10
|
|
collection.find().sort(by).limit(max).each((err, doc) => {
|
|
if (err) throw err
|
|
if (doc) {
|
|
const votes = doc.votes || 0
|
|
console.log(`${votes} | ${doc.author}: ${doc.quote.substr(0, 30)}...`)
|
|
return
|
|
}
|
|
db.close()
|
|
})
|
|
})
|
|
return
|
|
}
|