我遇到了簡單的findById與貓鼬的問題。通過_id與Mongoose查找
確認該項目在DB
db.getCollection('stories').find({_id:'572f16439c0d3ffe0bc084a4'})
存在隨着貓鼬
Story.findById(topic.storyId, function(err, res) {
logger.info("res", res);
assert.isNotNull(res);
});
不會找到它。
我也試圖轉換爲mongoId,仍然無法找到(即使貓鼬理應爲您完成此)
var mid = mongoose.Types.ObjectId(storyId);
let story = await Story.findOne({_id: mid}).exec();
實際上,我試圖用打字稿使用,因此AWAIT。
我也試過Story.findById(id)
的方法,還是找不到。
是否有一些通過普通_id
字段查找項目的疑難解答? _id必須位於Schema中嗎? (文檔說沒有)
我可以通過架構的其他值發現,只是_id
不能使用...
更新:我寫了一個簡短的測試這一點。
describe("StoryConvert", function() {
it("should read a list of topics", async function test() {
let topics = await Topic.find({});
for (let i = 0; i < topics.length; i ++) {
let topic = topics[i];
// topics.forEach(async function(topic) {
let storyId = topic.storyId;
let mid = mongoose.Types.ObjectId(storyId);
let story = await Story.findOne({_id: mid});
// let story = await Story.findById(topic.storyId).exec();
// assert.equal(topic.storyId, story._id);
logger.info("storyId", storyId);
logger.info("mid", mid);
logger.info("story", story);
Story.findOne({_id: storyId}, function(err, res) {
if (err) {
logger.error(err);
} else {
logger.info("no error");
}
logger.info("res1", res);
});
Story.findOne({_id: mid}, function(err, res) {
logger.info("res2", res);
});
Story.findById(mid, function(err, res) {
logger.info("res3", res);
// assert.isNotNull(res);
});
}
});
});
它會返回這樣的東西
Testing storyId 572f16439c0d3ffe0bc084a4
Testing mid 572f16439c0d3ffe0bc084a4
Testing story null
Testing no error
Testing res1 null
Testing res2 null
Testing res3 null
我注意到topic.storyId
是一個字符串 不知道這會造成什麼問題映射到另一個表。 我試着也加入了一些類型DEFS
storyId: {
type: mongoose.Schema.Types.ObjectId,
required: false
}
_id默認情況下,沒有必要將它添加在架構 您能檢索記錄創造了更多的信息,請參閱https://docs.mongodb.com/v3.0/reference/bson-types/#objectid?如果是這樣,當使用_id嘗試將其轉換爲toObject()時。 我不確定試試看! –