在mongoose schema nodejs中按ObjectId搜索

时间:2016-01-01 16:58:14

标签: node.js mongodb express mongoose

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

f(n)

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

我试图直接找到

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需要在ObjectId对象中,所以我尝试了

_owner

在两种情况下var uid = req.decoded._id; var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined 都是未定义的。注意我已经使用db重新检查了var uid = new mongoose.Types.ObjectId(req.decoded._id); var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined (通过打印)的值,因此它没有未定义并存在于db中。

我有什么问题吗?

1 个答案:

答案 0 :(得分:2)

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

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