这就是我想在 canciones 字段中实现的目标: -6ren">
gpt4 book ai didi

mongodb - 是否可以在同一查询中使用运算符 "$ne"和 "$elemMatch"?

转载 作者:行者123 更新时间:2023-12-01 22:44:06 24 4
gpt4 key购买 nike

我正在尝试查找 tipo=CD 和 canciones 不包含具有 title=Pajaritoscancion=2 的子文档的所有文档>

这就是我想在 canciones 字段中实现的目标:

not (title=Pajaritos and cancion=2)

我有以下收藏:

{ 
"tipo": "CD",
"Artista":"Los piratas",
"Titulo": "Recuerdos",
"canciones": [
{
"cancion":1,
"titulo":"Adios mi barco",
"longitud": "3:20"
},
{
"cancion":2,
"titulo":"Pajaritos",
"longitud": "4:15"
}
]
},
{
"tipo": "CD",
"Artista":"Los piratas",
"Titulo": "Recuerdos",
"canciones": [
{
"cancion":1,
"titulo":"Adios mi barco",
"longitud": "3:20"
},
{
"cancion":3,
"titulo":"Pajaritos",
"longitud": "4:15"
}
]
},

{
"tipo": "CD",
"Artista":"Los piratas",
"Titulo": "Recuerdos",
"canciones": [
{
"cancion":1,
"titulo":"Adios mi barco",
"longitud": "3:20"
},
{
"cancion":3,
"titulo":"Pajaritos",
"longitud": "4:15"
},
{
"cancion":4,
"titulo":"Pajaritos4",
"longitud": "44:15"
}
}

我的查询

db.media.find({"tipo" : "CD" ,"canciones" : { "$ne" : {"$elemMatch" :  {"titulo" : "Pajaritos", "cancion" : 2}}}})

我不想要的结果

{ "_id" : ObjectId("550f0a1c009ed3a1c9bbcdc1"), "tipo" : "CD", "Artista" : "Los piratas", "Titulo" : "Recuerdos", "canciones" : [ { "cancion" : 1, "titulo" : "Adios mi barco", "longitud" : "3:20" }, { "cancion" : 2, "titulo" : "Pajaritos", "longitud" : "4:15" } ] }
{ "_id" : ObjectId("550f0a1c009ed3a1c9bbcdc2"), "tipo" : "CD", "Artista" : "Los piratas", "Titulo" : "Recuerdos", "canciones" : [ { "cancion" : 1, "titulo" : "Adios mi barco", "longitud" : "3:20" }, { "cancion" : 3, "titulo" : "Pajaritos", "longitud" : "4:15" } ] }
{ "_id" : ObjectId("550f0a1c009ed3a1c9bbcdc3"), "tipo" : "CD", "Artista" : "Los piratas", "Titulo" : "Recuerdos", "canciones" : [ { "cancion" : 1, "titulo" : "Adios mi barco", "longitud" : "3:20" }, { "cancion" : 3, "titulo" : "Pajaritos", "longitud" : "4:15" }, { "cancion" : 4, "titulo" : "Pajaritos4", "longitud" : "44:15" } ] }

如您所见,结果包含试图避免的 "titulo": "Pajaritos"

尝试使用 $not 运算符代替 $ne

{ "_id" : ObjectId("550f173fc357b7a4e7a46e10"), "tipo" : "CD", "Artista" : "Los piratas", "Titulo" : "Recuerdos", "canciones" : [ { "cancion" : 1, "titulo" : "Adios mi barco", "longitud" : "3:20" }, { "cancion" : 3, "titulo" : "Pajaritos", "longitud" : "4:15" } ] }
{ "_id" : ObjectId("550f173fc357b7a4e7a46e11"), "tipo" : "CD", "Artista" : "Los piratas", "Titulo" : "Recuerdos", "canciones" : [ { "cancion" : 1, "titulo" : "Adios mi barco", "longitud" : "3:20" }, { "cancion" : 3, "titulo" : "Pajaritos", "longitud" : "4:15" }, { "cancion" : 4, "titulo" : "Pajaritos4", "longitud" : "44:15" } ] }

最佳答案

为了获得预期的结果,我将使用 $not运算符而不是 $ne运算符(operator)。 $not运算符将非常匹配否定 $elemMatch并给你预期的结果。因此,您的查询应为:

db.media.find({
"tipo": "CD",
"canciones": {
"$not": {
"$elemMatch": {
"titulo": "Pajaritos",
"cancion": 2
}
}
}
})

希望对您有所帮助。

关于mongodb - 是否可以在同一查询中使用运算符 "$ne"和 "$elemMatch"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198786/

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