1

如果我有这样的架构:

var Word = new Schema({
    name: { type: String, required: true },
    language: { type: ObjectId, ref: "Language", required: true }
});

我试着像这样查询它

var language = "5078547df6b753bc06000003";
word.find({ language: language }, function (err, words) {
  console.log(words);
});

我得到一个空的结果集 ( [])。我知道这种语言存在一个词,因为如果我删除{language: language}我得到这个对象:

[{
  "_id": "5079fd7b6df57b1b64cbf25d",
  "name": "dog",
  "language": "5078547df6b753bc06000003",
}]

我试过使用

var language = mongoose.Types.ObjectId("5078547df6b753bc06000003");
word.find({ language: language }, //etc.

但它仍然返回一个空的结果集。

为什么 mongoose 找不到这个语言 id 的单词?

4

1 回答 1

2

您已language在架构中将该字段声明为 ObjectId,但在 MongoDB 文档中,它实际上是一个字符串。因此,在您的find调用中,Mongooselanguage会将变量转换为 ObjectId,然后查询将返回language具有该值的 ObjectId 的任何文档(并且不会找到任何文档,因为它不是数据库中的 ObjectId)。

您要么需要更新文档以language包含 ObjectId 而不是字符串,要么更改您的架构以将language其定义为type: String. 如果您想像language在架构中所做的那样将其视为参考,那么您需要做前者。

于 2012-10-15T15:41:42.133 回答