gpt4 book ai didi

javascript - Mongoose $elemMatch 如何同时查询 $in 和 $nin

转载 作者:可可西里 更新时间:2023-11-01 10:10:48 24 4
gpt4 key购买 nike

我正在使用 Mongoose 来检查我的数据库中是否存在某个元素。

为此,我正在使用类似的东西-

object.aggregate([
{$match: {
"data": {
$elemMatch: {
$and:[
{name: {$in: ["A", "B"]}},
{name: {$nin: ["X"]}}
]
}
}
}
}
])

问题是文本是数组。因此,当我得到 ["A", "X"] 时,我希望结果为空。

你有什么想法吗?

------------ 编辑------------

对象看起来像:

example1 = { // shouldn't find - not in $in
_id: "123",
data: [
{id:"1",name:"E"},
{id:"2",name:"R"},
{id:"3",name:"T"}
]
}

example2 = { // shouldn't find - in both $in $nin
_id: "456",
data: [
{id:"4",name:"A"},
{id:"5",name:"X"},
{id:"6",name:"Z"}
]
}

example3 = { // should find - only in $in
_id: "789",
data: [
{id:"7",name:"A"},
{id:"8",name:"L"},
{id:"9",name:"Z"}
]
}

------------ 编辑 2 ----------

感谢@Anthony 帮我找到一个更好的例子来解决这个问题。

我认为这个问题发生在数组的数组中,例如:

数据集

[
{
_id: "456",
data: [
{
field: [
{
id: "1",
name: "A"
},
{
id: "2",
name: "B"
},
{
id: "3",
name: "Z"
}
]
},
{
field: [
{
id: "4",
name: "A"
},
{
id: "5",
name: "X"
},
{
id: "6",
name: "Z"
}
]
}
]
}
]

我的元素匹配解决方案有 2 个文档:( enter link description here )

db.collection.aggregate([
{
$match: {
data: {
$elemMatch: {
"$and": [
{
"field.name": {
"$in": [
"A",
"B"
]
}
},
{
"field.name": {
"$nin": [
"X"
]
}
}
]
}
}
}
}
])

建议的其他解决方案返回 0 个文档:( enter link description here )

db.collection.find({
"$and": [
{
"data.field.name": {
"$in": [
"A",
"B"
]
}
},
{
"data.field.name": {
"$nin": [
"X"
]
}
}
]
})

最佳答案

你可以用简单的查找查询来试试这个

db.collection.find({
"data": {
"$elemMatch": {
"$and": [
{ "field.name": { "$in": [ "A", "B" ] } },
{ "field.name": { "$nin": [ "X" ] } }
]
}
}
}, {
"data": {
"$elemMatch": {
"$and": [
{ "field.name": { "$in": [ "A", "B" ] } },
{ "field.name": { "$nin": [ "X" ] } }
]
}
}
})

试一试 here

关于javascript - Mongoose $elemMatch 如何同时查询 $in 和 $nin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682082/

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