Node.js Mongoees查询以查找id为';s,而不考虑其id';s顺序-Nodejs

Node.js Mongoees查询以查找id为';s,而不考虑其id';s顺序-Nodejs,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,=>Null(它应该返回对象) =>找到的对象 我想要查询,这样无论数组中ID的顺序如何,我都应该得到对象,它是不匹配的结果,我希望它是特定的结果,所以找到的对象应该只有2个键。有什么帮助吗 await Product.find({ features: ['5ec566ba1b81f05db31ae91d', '5e209ea374df9a1a3fd4d3e0']}) =>不应重新运行任何结果此查询有两个匹配的ID 这就是结果 await Product.find({ features: ['

=>Null(它应该返回对象)

=>找到的对象

我想要查询,这样无论数组中ID的顺序如何,我都应该得到对象,它是不匹配的结果,我希望它是特定的结果,所以找到的对象应该只有2个键。有什么帮助吗

await Product.find({ features: ['5ec566ba1b81f05db31ae91d', '5e209ea374df9a1a3fd4d3e0']})
=>不应重新运行任何结果此查询有两个匹配的ID

这就是结果

await Product.find({ features: ['5ec566ba1b81f05db31ae91d', '5e209ea374df9a1a3fd4d3e0', 'a1a3fd5e209ea374df94d3e0']})

您可以在中使用
$

{
  features: [ 5ec566ba1b81f05db31ae91d, 5e209ea374df9a1a3fd4d3e0 ],
  _id: 5ec5663756ca7576421628d8,
  __v: 1,
  created_at: 2020-05-20T17:17:43.342Z,
  updated_at: 2020-05-27T15:33:07.672Z,
}
await Product.find({ features: { $in: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d'] } })
这将查找具有任何提供的功能ID的产品

如果要匹配具有所有提供功能的产品,则可以使用
$all
而不是
$in

{
  features: [ 5ec566ba1b81f05db31ae91d, 5e209ea374df9a1a3fd4d3e0 ],
  _id: 5ec5663756ca7576421628d8,
  __v: 1,
  created_at: 2020-05-20T17:17:43.342Z,
  updated_at: 2020-05-27T15:33:07.672Z,
}
await Product.find({ features: { $in: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d'] } })
**如下文所述,
$all
将不起作用,因为该查询针对2个ID,并且有两个以上的功能**

另一种方法是使用
$和

await Product.find({ features: { $all: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d'] } })
由于要将大小限制为2,因此最终查询将

await Product.find({ $and: [
   { features: '5e209ea374df9a1a3fd4d3e0'} , 
   { features: '5ec566ba1b81f05db31ae91d'} 
 ]
})

仅供参考。如果
功能中有3个或更多元素,
而$all运算符只有2个元素,则这将不起作用。只有当两个id的大小相同时,它才起作用。$in不是我们想要的,而$的所有问题是,如果任何对象有3个id,其中2个id与我提供的id相同,它也会产生结果。但是我只需要id和长度的精确匹配,所以如果我提供两个id,那么结果对象应该只有两个id,下面的问题是您可以传递数组direclty db.collection.find({“members”:[“some id 1”,“some id 2”]}),它会给我精确的结果,但问题是,若som id 2首先出现,那个么它将不起作用https://stackoverflow.com/questions/22856201/mongoose-get-docs-matching-the-array
@VishalG明白了,我想你必须使用
$和
。@RobinCSamuel检查我已经添加了答案,谢谢你的快速回复help@VishalG别担心,正如我在前面的评论中提到的,我已经更新了我的答案。