使用数组查找文档,带或不带$ in?

时间:2019-05-09 13:32:11

标签: mongoose

我想使用名字的数组在集合中查找文档。如果我在普通的MongoDB中执行此操作,则文档说我应该使用$ in。但是当我使用猫鼬时,似乎不需要$ in。

设置:

String query = "SELECT " + pUUID + " FROM playerInfo;";

不用$ in查找通缉人员:

const Person = mongoose.model('person', new mongoose.Schema({
  firstName: {type: String, required: true},
  lastName: {type: String, required: true}
})

await Person.create([
  {firstName: 'Pelle', lastName: 'Larsson'},
  {firstName: 'Kalle', lastName: 'Jansson'},
  {firstName: 'Lotta', lastName: 'Nilsson'}
])

const wantedFirstNames = ['Pelle', 'Lotta']

使用$ in查找通缉人员:

const wantedPersons = await Person.find({firstName: wantedFirstNames})
// Returns two matching documents

有人可以告诉我跳过$ in是否可以,或者这两个示例是否有不同之处。在某处有记录吗?

更新

我在猫鼬的github页面上发布了一个问题,并收到了一个很好的答案: https://github.com/Automattic/mongoose/issues/7789 正如@ HRK44也说的那样。猫鼬会看到wantedFirstNames是一个数组,而firstName是一个字符串,因此仍要使用$。

1 个答案:

答案 0 :(得分:1)

两种解决方案是相似的。

可以在以下位置找到可能会帮助您的文档:https://mongoosejs.com/docs/api.html#model_Model.find

我认为这是相关的:

  

在执行以下操作之前,将条件强制转换为其各自的SchemaType。   命令已发送。

完成此操作的部分代码可以在此处找到: https://github.com/Automattic/mongoose/blob/master/lib/cast.js#L296

第305行:

obj[path] = { $in: casted };

但是我同意在这个问题上文档不是很清楚...