gpt4 book ai didi

javascript - 使用 $and 和 $in 运算符过滤 mongodb 中标签组的项目时出现问题

转载 作者:行者123 更新时间:2023-12-02 17:29:51 25 4
gpt4 key购买 nike

这是我正在尝试运行的 find()

 Item.find({'tags.id':{ $and:
[
{
$in: [
'530f728706fa296e0a00000a',
'5351d9df3412a38110000013'
]
},
{
$in: [
'530f728706fayy6e0a00000a',
'5351d9df3412zz8110000013'
]
}
]
}}, function(err, items){
//callback
console.log(err)
})

这是错误:

[Error: Can't use $and with ObjectId.]

<小时/>

我发现我构建之前查询的方式无效,但现在的问题是,当我尝试在 JS 中构建查询时,它会添加撇号:

js 构建的查询尝试:

var 标签 = { $和: [ { '标签.id': { 美元:[ '530f728706fa296e0a00000a' ] } }, { '标签.id': { 美元:[ '5351d9df3412a38110000013' ] } } ] } 控制台.log(“标签”)日志:

{ '$and': [ { 'tags.id': [Object] }, { 'tags.id': [Object] } ] }

额外的撇号破坏了 mongo db $and 和 $in 功能,有没有办法防止添加它们?

最佳答案

用法不正确,$and是一个整体修饰符,而不是可以分配给特定字段的参数。如果有什么你应该有这个:

 Item.find({ "$and":
[
{ "tags._id": {
$in: [
'530f728706fa296e0a00000a',
'5351d9df3412a38110000013'
] }
},
{
"tags.id": { $in: [
'530f728706fayy6e0a00000a',
'5351d9df3412zz8110000013'
]}
}
]

但这也没有任何意义。 MongoDB 中的所有查询对于所有条件来说都是隐式的逻辑“与”。

您似乎真正想要做的是匹配“标签”数组中具有这些值的两个组合的文档。根据您的 MongoDB 版本,有两种方法。

对于 2.6 以下的版本:

Item.find({
"$or": [
{ "$and": [
{ "tags.id": "530f728706fa296e0a00000a" },
{ "tags.id": "5351d9df3412a38110000013" }

]},
{ "$and": [
{ "tags.id": "530f728706fayy6e0a00000a" },
{ "tags.id": "5351d9df3412zz8110000013" }
]}
]
},

在 2.6 及更高版本中,使用 $all 会稍微好一些。运算符:

Item.find({
"$or": [
{ "tags.id": {
"$all": [
"530f728706fa296e0a00000a",
"5351d9df3412a38110000013"
]
}},
{ "tags.id": {
"$all": [
"530f728706fayy6e0a00000a",
"5351d9df3412zz8110000013"
]
}}
]
},

请注意$all存在于早期版本中,但工作方式不同,因此当您想要这种类型的结果时,前一个用例适用。

$in 运算符只会测试给定的任一值是否存在,考虑到您正在使用的组合,该值似乎不存在你想要什么。

关于javascript - 使用 $and 和 $in 运算符过滤 mongodb 中标签组的项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com