如何通过javascript使用mongoose从mongoDB获取字段值

如何通过javascript使用mongoose从mongoDB获取字段值,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,这是我的数据库newDb中的users集合下的文档 > db.users.find().pretty() { "_id" : ObjectId("57025801593e301831ef3c72"), "country" : "U.S", "gender" : "Male", "lastName" : "Ks", "firstName" : "Balajee", "password" : "$2

这是我的数据库newDb中的users集合下的文档

> 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);
}
试试这个:

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

如果您使用
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));

这里是什么
arr
。这是
users
集合上的
find
方法的结果吗?不,arr是该javascript文件中的一个全局数组,而且我还没有在该JS文件中导出任何内容,它包含一些表单验证和提交。您可以从该JS文件导出方法
check
?只有方法
检查
没有其他。是的,我可以,现在我做了module.exports=函数检查(arr,position,operation,useripp)实际上,我在另一个JS(script.JS)中,除了主节点文件(server,JS是我的情况)之外,它没有到mongoDB或Mongoose的导出或链接,还有什么问题?你的项目使用猫鼬,对吗?你在哪里连接到db?我正在处理的JS文件有一些表单验证和一个函数,该函数接受数据库中字段的值。我在应用筛选器时遇到问题。我使用了_id作为过滤器,我得到了[ReferenceError:position is not defined]@Alexandri向您展示了如何解决您的原始问题。如果您有一个新问题,请创建一个新问题,在那里添加代码和错误描述。查询中将包含什么内容?我将它添加到我的route.js文件的post call下,该字段和要搜索
用户
集合的值。例如:
var query={“firstName”:“Balajee”}
将在
firstName
字段中搜索值
“Balajee”
。我得到的db是未定义的@siddharth不知道您正在使用Mongoose。看看最新的答案。