【问题标题】:How to get the value of a field from mongoDB using mongoose through javascript如何通过javascript使用mongoose从mongoDB获取字段的值
【发布时间】:2016-04-05 21:50:36
【问题描述】:

这是我的数据库newDbusers集合下的一个文档,

> db.users.find().pretty()
{
        "_id" : ObjectId("57025801593e301831ef3c72"),
        "country" : "U.S",
        "gender" : "Male",
        "lastName" : "Ks",
        "firstName" : "Balajee",
        "password" : "$2a$08$.Qts1uaOJiyH.A0LM9QeGOB1EBfItB2nV29RxLVbloDnzAggIuGf6",
        "email" : "balajee41@gmail.com",
        "position" : [
                "1",
                "2"
        ],
        "__v" : 1,
        "operation" : "add",
        "userip" : "11"}

如何从该文档中获取位置、操作和用户IP,并将其用于执行功能? 这是一个单独的 Javascript 文件中的函数,与主节点文件不同。

function verifyOTP() {
    var position = user.position;
    var operation = user.operation;
    var useripp = user.userip;
    check(arr, position, operation, useripp);
}

【问题讨论】:

  • 这里的arr 是什么。是users 集合上的find 方法的结果吗?
  • 不,arr 是那个 javascript 文件中的全局数组,
  • 另外我还没有在那个 JS 文件中导出任何东西,它包含一些表单验证和提交
  • 你能从那个JS文件中导出方法check吗?只是方法check,没有别的。
  • 是的,我可以,现在我做了 module.exports = function check(arr, position,operation,useripp)

标签: javascript node.js mongodb mongoose


【解决方案1】:

如果您使用mongoose,那么定义模型并使用它比使用原始集合要好得多。

首先在文件user.js中定义一个模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
  firstName: String,
  lastName: String,
  // TODO: add other required fields
});

mongoose.model('user', userSchema);

exports.userSchema = userSchema;

例如在validation.js中添加验证逻辑:

exports.verifyOTP = function(user) {
  var position = user.position;
  var operation = user.operation;
  var useripp = user.userip;
  check(arr, position, operation, useripp); // TODO: what is arr?
};

并在user-service.js 中添加以下代码:

var User = require('mongoose').model('user');
var validation = require('./validation');

var filter = { name: 'firstName' }; // TODO: use real filter here
var fields = 'position operation userip';
User
  .findOne(filter, fields)
  .then(validation.verifyOTP)
  .catch(err => console.log(err));

【讨论】:

  • 实际上,我在另一个 JS(script.js) 中,除了没有导出或链接到 mongoDB 或 mongoose 的主节点文件(服务器,js 是我的情况)
  • 还有什么问题?你的项目使用猫鼬,对吧?你在哪里连接到 db?
  • 我正在处理的 JS 文件有一些表单验证和一个获取数据库中字段值的函数。
  • 我在应用过滤器时遇到问题。我使用 _id 作为过滤器,我得到 [ReferenceError: position is not defined] @Alexander
  • 我向您展示了如何解决您的原始问题。如果您有新问题,请创建一个新问题,在此处添加代码和错误描述。
【解决方案2】:

试试这个:

var Helper = require('path_to_the_module_where_the_method_check_is_defined_and_exported');

function verifyOTP(user) {
    var position = user.position;
    var operation = user.operation;
    var useripp = user.userip;
    Helper.check(position, operation, useripp);
};

var query = {
    // Your query here
};

var projection = {
     position: 1,
     operation: 1,
     userip: 1,
     _id: 0
};

User.findOne( query, projection, function(err, user) {
    if(err) console.log("Error: " + JSON.stringify(err));
    if(user) verifyOTP(user);
});

【讨论】:

  • 查询中的内容是什么?我在 post call 下将它添加到我的 route.js 文件中
  • 要搜索 users 集合的字段和值。例如:var query = { "firstName" : "Balajee" } 将在字段 firstName 上搜索值 "Balajee"
  • 我将 db 作为未定义的@Siddharth
  • 不知道您使用的是 Mongoose。看看更新的答案。
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多