Node.js Mongoees查询以查找id为';s,而不考虑其id';s顺序-Nodejs
=>Null(它应该返回对象) =>找到的对象 我想要查询,这样无论数组中ID的顺序如何,我都应该得到对象,它是不匹配的结果,我希望它是特定的结果,所以找到的对象应该只有2个键。有什么帮助吗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: ['
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别担心,正如我在前面的评论中提到的,我已经更新了我的答案。