MongoDB 创建用户相关视图/管道

Posted

技术标签:

【中文标题】MongoDB 创建用户相关视图/管道【英文标题】:MongoDB create user dependent view/pipeline 【发布时间】:2022-01-18 15:40:56 【问题描述】:

我只是偶然发现了 MongoDB 中的视图,并想知道,原则上是否可以创建一个用户依赖视图。例如,他的用户设置来自 User_Settings 集合。

对于视图,我想出了以下代码,只要事先知道用户名,它就可以正常工作:

[
    
        "$match" :
         
            "name" : "test"
        
    
], 
 
    "allowDiskUse" : false

当前用户名可通过以下方式访问:

var currentUser = db.runCommand(connectionStatus: 1).authInfo.authenticatedUsers[0].user

但我无法找到如何将这两者合并成一个连贯的视图定义。我试过这样,这显然是行不通的:

    "$let" :
    
        vars: currentUser: connectionStatus: 1,
        in: connectionStatus: 1
    
     
        "$match" :
         
            "name" : currentUser
        
    
], 
 
    "allowDiskUse" : false

这有可能吗?如果是这样,如果有人能提供一个例子,我将非常感激。

谢谢

【问题讨论】:

【参考方案1】:

const MongoClient = require('mongodb').MongoClient;

const mongo_uri = `mongodb://$settings.database.host:$settings.database.port`;
// use it for setup
const MongoClient = require('mongodb').MongoClient;
const settings = require('./settings');
const mongo_uri = `mongodb://$settings.database.host:$settings.database.port`;
const bcrypt = require('bcrypt');

const saltRounds = 10;

const user = 
  username: 'adam',
  password: 'password'
;

MongoClient.connect(mongo_uri,  useNewUrlParser: true )
.then(client => 
  const db = client.db('project');
  const collection = db.collection('users');
  bcrypt.genSalt(saltRounds, (error, salt) => 
    bcrypt.hash(user.password, salt, (error, hash) => 
      user.password = hash;
      collection.insertOne(user)
        .then(() => console.log('User inserted'))
        .catch(error => console.error(error));
    );
  );
).catch(error => console.error(error));

【讨论】:

以上是关于MongoDB 创建用户相关视图/管道的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb常用的相关命令总结

Mongodb常用的相关命令总结

是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?

在 MongoDB 中存储数据的最佳方式

MongoDB数据库 : 管道,用户管理,副本集等

新知 | MongoDB 账号管理