node.js - 在mongoose模式nodejs中按ObjectId搜索

标签 node.js mongodb express mongoose

我正在将 mongoose 与 nodejs 一起使用。我有下面给出的项目架构和用户架构。

var userSchema = new Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  items : [{ type: Schema.Types.ObjectId, ref: 'Item' }]
});

var itemSchema = new Schema({
  name: { type: String, required: true },
  _owner : { type: Schema.Types.ObjectId, ref: 'User' }
});

我正在尝试按用户 ID(项目架构中的_owner)查找项目。

我尝试过直接查找

var uid = req.decoded._id;
var item = Item.findOne({"_owner": uid});
console.log(item.name);   // undefined

通过搜索类似的内容,我发现 id 需要位于 ObjectId 对象中,所以我尝试了

var uid = new mongoose.Types.ObjectId(req.decoded._id);
var item = Item.findOne({"_owner": uid});
console.log(item.name);   // undefined 

在这两种情况下,item.name 都是未定义的。请注意,我已经使用数据库重新检查了 req.decoded._id 的值(通过打印),因此它没有未定义并存在于数据库中。

我是不是做错了什么?

最佳答案

Model.findOne是一个异步调用。它不会返回文档,而是将其传递给您需要作为第二个参数提供的回调函数。

var uid = req.decoded._id;
var item = Item.findOne({"_owner": uid}, function(err, item) {
    console.log(item.name);
});

关于node.js - 在mongoose模式nodejs中按ObjectId搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558075/

相关文章:

javascript - 如何将对象从 EJS 传递到 Node.js 路由器 - Javascript、EJS、Node.js、MySQL

javascript - 抽象中间件功能

javascript - while(count!==3) 无法检查回调状态

node.js - 我无法在 ubuntu 上安装 nodejs 6

java - 在聚合java时连接mongo数据库字段

javascript - ElasticSearch 查询过滤掉某些摄像头

javascript - 添加 bodyParser() 挂起所有 api 请求

node.js - 我无法在 Windows 7 上安装 node.js

javascript - 在循环中更改对象属性变量

PHP Mongo 查询不为空