我正在尝试执行一个简单的查询,只是为了检查我们是否有该记录。
const exists = await Book.findOne({ $or: [{ author_id: item.id }, { author_id: item.network.code }] });
检查时仍然会发现不存在的记录并返回类似author_id 甚至不存在的内容的问题。有时,值
item.id
或 item.network.code
之一可以为空或未定义,但我需要它来匹配确切的东西(如果可用)。我在这里缺少什么?
收藏范例
_id:60a308208b70ad7e14f41cc9
author_id: s76yrb0g78ers87ngyre0s78yeyrst08n7y
title: 'Lord of the rings'
created_at: 2021-05-18T00:19:44.058+00:00
__v:0
它实际返回什么
_id:70b308307b60ad7e14f51cd9
title: 'Harry Potter'
created_at: 2021-07-18T00:20:12.040+00:00
__v:0
这是一种漫长而乏味的检查方法,但我基本上完成了以下操作,并且效果很好
let exists = false;
if (item.network?.code) {
exists = await Book.findOne({ author_id: item.network.code });
}
if (item.id && !exists) {
exists = await Book.findOne({ author_id: item.id });
}
如果有任何更清洁的方法来执行此操作,请告诉我。
您没有给出比较器查询
const exists = await Book.findOne({
$or: [
{ author_id: { $eq: item.id },
{ author_id: { $eq: item.network.code}
}]
});