javascript - 如何使用 mongo 创建带有字段/变量/索引的集合
问题描述
我正在从头开始学习 mongo,我无法弄清楚如何使用预定义的变量创建一个集合。我需要这样做才能在我的项目上拥有独特的邮件。任何帮助将不胜感激。
我正在尝试做一个基本的CRUD
,您在代码中看到的所有内容都是许多不同的教程合二为一,到目前为止,我能够创建新用户并获得所有用户的列表,但是为了删除一个或编辑/更新一个我真的需要一个独特的属性。
如果有用,这是我的代码:
const express= require ('express');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const app = express();
const cors = require('cors');
const bcrypt = require('bcrypt');
const MongoClient = require('mongodb').MongoClient;
const saltRounds=10;
app.use(cors());
app.use(express.json());
app.listen(3001,()=>{
console.log("Welcome");
});
// CONEXION BASE DE DATOS
MongoClient.connect('mongodb+srv://admin:admin@cluster0.bs9d2.mongodb.net/test?retryWrites=true&w=majority'
,{ useUnifiedTopology: true }).then(client=>{
console.log('Bienvenido a database mongo');
const db = client.db('ezbuy-database');
const usersCollection = db.collection('users');
/*Añade un usuario nuevo a la BD*/
/*Falta ver como hacer datos unicos, pero no se como*/
app.post('/newuser', (req, res) => {
const userObject ={
name: req.body.name,
identification:req.body.identification,
email:req.body.email,
password:req.body.password,
cellphone:req.body.cellphone,
addedDate:req.body.addedDate,
lastLoginDate:req.body.addedDate,
role:req.body.role,
speciality:req.body.speciality
}
;
bcrypt.hash(userObject.password,saltRounds,(err,hash) => {
if(err){console.log(err)}
userObject.password=hash;
usersCollection.insertOne(userObject)
.then(result => {
console.log(result);
console.log("Dato Añadido a mongo ");
res.send('Usuario Creado');
})
.catch(error => console.error(error))
})
})
/*Devuelve todos los usuarios creados*/
app.get('/allusers', (req, res) => {
db.collection("users").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
res.send(result);
});
app.get('/userbyid',(req,res) =>{
db.collection("users").findOne({})
}
)
})
}).catch(console.error)
解决方案
我假设您指的是使用预定义变量创建集合的数据库模式。MongoDB 没有使用默认值预填充值的严格模式。这取决于您的应用程序来处理。 领域模式
文档插入完成后,您可以使用
result.insertedId
. MongoDB 集合.insertOne()
usersCollection.insertOne(newUser)
.then(result => console.log(`Successfully inserted user with _id: ${result.insertedId}`))
.catch(err => console.error(`Failed to insert item: ${err}`))
要通过 id 获取该用户文档,您可以_id
在过滤器中使用。
usersCollection.findOne({_id: userId})
-- 所以在用户集合的情况下,正常情况下通常也有一个用户可以记住的唯一值。(电子邮件,用户名)。在这种情况下,您需要在集合上创建一个唯一索引。 MongoDB 唯一索引
usersCollection.createIndex( { "email": 1 }, { unique: true } )
唯一标志将确保不会创建具有重复电子邮件地址的用户,然后您可以像下面这样查询用户。
usersCollection.findOne({email: emailAddress})
推荐阅读
- c# - 在 .NET 中实现枚举数组到字符串数组类型转换器
- javascript - 第一个事件中的禁用按钮不会触发第二个事件
- python - 没有得到预期的结果 os.system
- mysql - 错误代码:1066。不是唯一的表/别名:“区域”,使用外键连接 3 个数据库表
- jquery - jQuery总和
- java - 无法在 Eclipse (Java) 中使用 Scanner 读取 txt 文件
- javascript - 使用 Ionic 3 文件 url 给出 File 对象的 bits 参数
- reactjs - 反应导航在“连接(AuthScreen)”的上下文中找不到“商店”
- list - 使用 Lists Prolog 的河内塔
- c# - 将图像管道传输到 FFmpeg 标准输入