如何检索一个数组中的所有文档,除了一个包含MongoDB中特定值字段的文档之外?

如何检索一个数组中的所有文档,除了一个包含MongoDB中特定值字段的文档之外?,mongodb,mongodb-query,Mongodb,Mongodb Query,我想找到的位置不是vname:“vij” 我的结果可能是 db.sample.find(): {_id:1, locations: [{vname: "edd", distr: "prakasam"}, {vname: "vij", distr: "krishna"}, {vname: "kakani", distr: "guntur"}]}; 我尝试了以下问题,但帮不了我 {_id: 1, locations: [{vname: "edd", distr: "prakasam"}, {vn

我想找到的位置不是
vname:“vij”

我的结果可能是

db.sample.find():
 {_id:1, locations: [{vname: "edd", distr: "prakasam"}, {vname: "vij", distr: "krishna"}, {vname: "kakani", distr: "guntur"}]};
我尝试了以下问题,但帮不了我

{_id: 1, locations: [{vname: "edd", distr: "prakasam"}, {vname: "kakani", distr: "guntur"}]};
它正在返回整个文档,但我需要排除此文档

任何帮助都是值得的。

试试以下方法:

db.sample.find({'locations.$.vname': {$ne: 'vij'}})
试试这个:

db.sample.find({'locations.$.vname': {$ne: 'vij'}})

由于
位置
是模式中的对象数组,因此不能从结果中排除特定对象。您可以从结果中排除整个
位置
字段。但是,您可以选择在集合上运行聚合

> db.sample.find({"locations.vname": {$ne: "vij"}})
这将以这种形式返回数据

db.sample.aggregate([
     {
        "$match" :{"_id":1}
     }, 
     {
        "$unwind" :"$locations"
     },
     {
        "$match" :{
           "locations.vname":{"$ne": "vij"}
         }
     }
    ])

由于
位置
是模式中的对象数组,因此不能从结果中排除特定对象。您可以从结果中排除整个
位置
字段。但是,您可以选择在集合上运行聚合

> db.sample.find({"locations.vname": {$ne: "vij"}})
这将以这种形式返回数据

db.sample.aggregate([
     {
        "$match" :{"_id":1}
     }, 
     {
        "$unwind" :"$locations"
     },
     {
        "$match" :{
           "locations.vname":{"$ne": "vij"}
         }
     }
    ])

使用
$redact
$$PRUNE
位置
数组匹配
vname
as
vij

{ "_id" : 1, "locations" : { "vname" : "edd", "distr" : "prakasam" } }
{ "_id" : 1, "locations" : { "vname" : "kakani", "distr" : "guntur" } }

使用
$redact
$$PRUNE
位置
数组匹配
vname
as
vij

{ "_id" : 1, "locations" : { "vname" : "edd", "distr" : "prakasam" } }
{ "_id" : 1, "locations" : { "vname" : "kakani", "distr" : "guntur" } }

没有工作,我试过了。只是从我的mongo shell-works。你的MongoDB版本是什么?您使用的是shell吗?版本3.2.6,我在windows中使用cmd提示符。尝试启动Mongo shell并在shell中执行相同的操作。只需在CMDO中键入mongo谢谢您的时间,我尝试了您所说的方式,但未能成功。在另一条评论中获得了解决方案。:)没有工作,我试过了。只是从我的mongo shell-works。你的MongoDB版本是什么?您使用的是shell吗?版本3.2.6,我在windows中使用cmd提示符。尝试启动Mongo shell并在shell中执行相同的操作。只需在CMDO中键入mongo谢谢您的时间,我尝试了您所说的方式,但未能成功。在另一条评论中获得了解决方案。:)这很好,但是我需要文章中提到的输出。“位置”字段类型也在改变,而不是数组,它正在成为一个对象/文档。你能帮我用那种格式吗。谢谢。这很好,但我需要文章中提到的输出。“位置”字段类型也在改变,而不是数组,它正在成为一个对象/文档。你能帮我用那种格式吗。谢谢,很好!我不知道“$redact”太棒了,它真的帮了我很多。谢谢,很好!我不知道“$redact”太棒了,它真的帮了我很多。非常感谢。