检查数据库中文档中是否已存在Mongodb字段

问题描述

我是否将代码放在server.js中具有现有字段的文档中。还是我可以在前端(reactjs)中这样做,因为我有一个计数器字段,如果要添加它,但该字段已经存在,我想增加一个计数器字段。

这是我的server.js

const express = require("express");
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());

const uri = process.env.ATLAS_URI;
mongoose.connect(uri,{
useNewUrlParser: true,useCreateIndex: true,useUnifiedTopology: true
})
.then(() => console.log('DB Connected!\n'))
.catch(err => {
console.log(err);
});

mongoose.connection.once('open',() =>{
    console.log('MongoDB database connection established successfully');
})
const trackRouter = require('./routes/track');

app.use('/track',trackRouter);

app.listen(port,() =>{
    console.log('Server is running on port: 5000');
})

这是我的track.model.js

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const trackSchema = new Schema({
    track:{type:String,required: true},trackID:{type:String,required:true,unique:true},year:{type:Number,required:true},genre:{type:String,album:{type:String,artist:{type:String,artistID:{type:String,count:{type:Number,},{
    timestamps: true,});

const Track = mongoose.model('Track',trackSchema);

module.exports = Track;

最后这是track.js

const router = require('express').Router();
let Track = require('../models/track.model');

router.route('/').get((req,res) => {
    Track.find()
        .then(track => res.json(track))
        .catch(err => res.status(400).json('Error: ' + err));
});

router.route('/add').post((req,res) => {
    const track = req.body.track;
    const trackID = req.body.trackID;
    const year = Number(req.body.year);
    const genre = req.body.genre;
    const artist = req.body.artist;
    const artistID = req.body.artistID;
    const album = req.body.album;
    const count = Number(req.body.count);


    const newTrack = new Track({
        track,trackID,year,genre,album,artist,artistID,count,});
    newTrack.save()
        .then(() => res.json('Song added!'))
        .catch(err => res.status(400).json('Error: ' + err));
});
router.route('/:id').get((req,res) => {
    Track.findById(req.params.id)
    .then(exercise => res.json(exercise))
    .catch(err => res.status(400).json('Error: ' + err));
}); 
router.route('/:id').delete((req,res) => {
    Track.findByIdAndDelete(req.params.id)
    .then(() => res.json('Song deleted'))
    .catch(err => res.status(400).json('Error: ' + err));
});
router.route('/update/:id').post((req,res) => {
    Track.findById(req.params.id)
    .then(track=>{
        track.track = req.body.track;
        track.trackID = req.body.trackID;
        track.year = Number(req.body.year);
        track.genre = req.body.genre;
        track.album = req.body.album;
        track.artist = req.body.artist;
        track.artistID = req.body.artistID;
        track.count = req.body.count;
        track.save()
            .then(() => res.json('Song updated!'))
            .catch(err => res.status(400).json('Error: ' + err));
    })
    .catch(err => res.status(400).json('Error: '+ err));
})

module.exports = router;

数据库内部插入文档的前端(reactJS)

 const playlist1 = {
            track: tracks[currentTrack].name,trackID:tracks[currentTrack].id,year:parseInt(this.state.year),genre:this.state.genre,album: tracks[currentTrack].album.name,artist: tracks[currentTrack].artists[0].name,artistID: tracks[currentTrack].artists[0].id,count: 1,}
        axios.post('http://localhost:5000/track/add',playlist1)
            .then(res => console.log(res.data));

解决方法

在Mongo Shell中,您可以write a query查看给定字段是否存在。

db.collection.find({field: {$exists: true}})

无法看到您的代码或上下文,我不能肯定如何编写查询查询。

通常,您会将查询放在服务器中,并向您的UI公开API路由,以便它可以按您喜欢的任何格式访问查询返回的信息。

更新

收到更新的评论后,我发现您不想查看字段是否存在,而是想知道字段中是否存在特定值。

这可以通过更新查询来完成,您可以在查询中指定trackID并在更新对象中增加计数器。

const trackID = 1
await Track.findOneAndUpdate(
   { trackID },// The query to find the docs to update
   { $inc: { count: 1 } },// The actual update to perform
   { upsert: true },// Mongoose options. This one will create the document if it doesn't exist
)

https://mongoosejs.com/docs/api/model.html#model_Model.findOneAndUpdate