簡體   English   中英

MongoDB和Cosmos DB密鑰錯誤收集

[英]MongoDB and Cosmos DB key error collection


我正在嘗試使用Express&Angular和Azure Cosmos DB創建我的第一個MongoDB應用程序。
這是我的js文件:

hero.model.js
  const mongoose = require('mongoose'); const Schema = mongoose.Schema; const heroSchema = new Schema({ id: { type: Number, required: true, unique: true }, name: String }, { collection: 'Heroes' }) const Hero = mongoose.model('Hero', heroSchema); module.exports = Hero; 
mongo.js
   const express = require('express');
    const bodyParser = require('body-parser');
    const path = require('path');
    const routes = require('./routes');
    const root = './';
    const port = process.env.PORT || '3000';
    const app = express();
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(express.static(path.join(root, 'docs')));
    app.use('/api', routes);
    app.get('*', (req, res) => {
    res.sendFile('docs/index.html', {root});
    });
index.js
  const express = require('express'); const bodyParser = require('body-parser'); const path = require('path'); const routes = require('./routes'); const root = './'; const port = process.env.PORT || '3000'; const app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(root, 'docs'))); app.use('/api', routes); app.get('*', (req, res) => { res.sendFile('docs/index.html', {root}); }); 
route.js
  const express = require('express'); const router = express.Router(); const heroService = require('./hero.service'); router.get('/heroes', (req, res) => { heroService.getHeroes(req, res); }); router.post('/hero', (req, res) => { heroService.postHero(req, res); }); router.put('/hero/:id', (req, res) => { heroService.putHero(req, res); }); router.delete('/hero/:id', (req, res) => { heroService.deleteHero(req, res); }); module.exports = router; app.listen(port, () => console.log(`API running on localhost:${port}`)); 
hero.service.js
  const Hero = require('./hero.model'); require('./mongo').connect(); function getHeroes(req, res) { const docquery = Hero.find({}); docquery .exec() .then(heroes => { res.status(200).json(heroes); }) .catch(error => { res.status(500).send(error); return; }); } function postHero(req, res) { const originalHero = { id: req.body.id, name: req.body.name }; const hero = new Hero(originalHero); hero.save(error => { if (checkServerError(res, error)) return; res.status(201).json(hero); console.log('Hero created successfully!'); }); } function checkServerError(res, error) { if (error) { res.status(500).send(error); return error; } } function putHero(req, res) { const originalHero = { id: parseInt(req.params.id, 10), name: req.body.name }; Hero.findOne({ id: originalHero.id }, (error, hero) => { if (checkServerError(res, error)) return; if (!checkFound(res, hero)) return; hero.name = originalHero.name; hero.save(error => { if (checkServerError(res, error)) return; res.status(200).json(hero); console.log('Hero updated successfully!'); }); }); } function deleteHero(req, res) { const id = parseInt(req.params.id, 10); Hero.findOneAndRemove({ id: id }) .then(hero => { if (!checkFound(res, hero)) return; res.status(200).json(hero); console.log('Hero deleted successfully!'); }) .catch(error => { if (checkServerError(res, error)) return; }); } function checkFound(res, hero) { if (!hero) { res.status(404).send('Hero not found.'); return; } return hero; } module.exports = { getHeroes, postHero, putHero, deleteHero }; 

僅當我第一次發布新英雄,第二次給我一個錯誤時,它才起作用:E11000重復鍵錯誤集合:admin.Heroes失敗的_id或唯一鍵約束。

請幫忙!!

謝謝。

我知道已經有一段時間了,但是我遇到了同樣的問題。 解決方案是避免使用字段名稱id,將其重命名為UID或其他名稱。 完成后,您必須刪除整個集合並重新啟動。

如果您遵循Microsoft CosmosDB Angular教程,則可以在下面克隆存儲庫並在本地進行測試。

https://github.com/Azure-Samples/angular-cosmosdb

如果您使用的是更新版本的貓鼬,則必須升級以下連接字符串。

         //useMongoClient: true
         useNewUrlParser: true 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM