Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 获取文档的特定部分_Mongodb - Fatal编程技术网

Mongodb 获取文档的特定部分

Mongodb 获取文档的特定部分,mongodb,Mongodb,我正在尝试Mongo db,我想知道是否可以只获取文档的特定部分 例如,我有: { "name" : "MongoDB", "info" : { x : 203, y : 102 } } 我只想要info的内容 我找到的最接近的是db.collection.find({},{info:1}),但当我只需要{x:203,y:102}时,它返回我{info:{x:203,y:102}

我正在尝试Mongo db,我想知道是否可以只获取文档的特定部分

例如,我有:

{
  "name" : "MongoDB",
  "info" : { x : 203, y : 102 }
}
我只想要
info
的内容

我找到的最接近的是
db.collection.find({},{info:1})
,但当我只需要
{x:203,y:102}
时,它返回我
{info:{x:203,y:102}
<

db.collection.find({},{'info.x':1, 'info.y':1})

但这意味着在投影中列出信息对象的每一项-这可能是您想要的,也可能不是您想要的。

不,您不能只返回x/y的值;即使您限制了字段,外部结构仍然会返回

有关更多信息,请参阅。

您可以使用类似以下功能的
distinct()
函数:

db.collection.distinct("info", {info : {$exists : true}})

读这个

在这种情况下,如果不指定投影,find()方法将返回与查询匹配的所有文档的所有字段。

您可以使用:

  • $匹配阶段(可选)以筛选结果
  • $project阶段以选择字段

    db.getCollection('yourCollection').aggregate([
    {$match:{{u id:ObjectId(“566fc97f5b79dff1a73ca2ae”)},
    {$project:{{u id:0,“x”:“$info.x”,“y”:“$info.y”}
    ])

    • Mongo 4.2
      开始,可以使用聚合操作符将一个文档替换为另一个文档(在本例中为子文档):

    • Mongo 4.2
      之前和启动
      Mongo 3.4
      之前,可以使用
      $replaceWith

      db.collection.aggregate({ $replaceRoot: { newRoot: "$info" } })
      

    你知道为什么是0吗?这听起来像是一个完全正确的答案,而前2名意味着海报想要做的事情是不可能的。尽管它有“distinct”关键字,但它不像mysql那样选择不同的项目,它只选择您提供的“distinct”字段。因此,这个答案实际上比其他两个答案产生的结果要好得多。我也对这个解决方案感兴趣,因为我的文档大小为+5mb,而且我只关注特定的字段。不,我无法将特定字段保存在单独的表中,因为我在一个文档中存储了多个字段(+10k个字段)
    db.collection.aggregate({ $replaceRoot: { newRoot: "$info" } })