Mongoose $或操作员无法正常工作

问题描述 投票:0回答:2

我正在尝试执行一个简单的查询,只是为了检查我们是否有该记录。

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
mongodb mongoose
2个回答
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 });
}

如果有任何更清洁的方法来执行此操作,请告诉我。


0
投票

您没有给出比较器查询

const exists = await Book.findOne({
  $or: [
     { author_id: { $eq: item.id },
     { author_id: { $eq: item.network.code} 
  }] 
});
© www.soinside.com 2019 - 2024. All rights reserved.