У меня возникли проблемы с простым findById с мангуста.найти _id с Mongoose
Подтверждено элемент существует в БД
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();
Я на самом деле пытается использовать это с машинописи, отсюда и ждут.
Я также пробовал метод Story.findById(id)
, по-прежнему не может быть найден.
Есть ли какие-либо ключи для поиска предметов на равнине _id
? ли _id должны быть в схеме? (Не документы говорят, нет)
я могу найти другие значения в схеме, просто _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 создаются по умолчанию Нет необходимости добавлять его в схеме возможности извлечения записей Вы?если это так при использовании _id попытаться скрыть его в toObject(). Я не уверен, дайте ему попробовать !!! –