0

我只是偶然发现了 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
}

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

谢谢

4

1 回答 1

0

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));

于 2021-12-15T12:55:12.753 回答