我正在尝试使用mongo db,我想询问是否可能只获取文档的特定部分?
示例
{
"name" : "MongoDB",
"info" : {
x : 203,
y : 102
}
}
我只想要info
的内容。
我发现的最近的是db.cellection.find({},{info:1 })
,但这会返回信息:内容,我想返回仅内容。
有可能吗?怎么样?
答案 0 :(得分:28)
你可以做到
db.collection.find({},{'info.x':1, 'info.y':1})
但这意味着在投影中列出信息对象的每个项目 - 这可能是也可能不是您正在寻找的内容。
答案 1 :(得分:13)
您可以使用类似于以下内容的distinct()
函数:
db.collection.distinct("info", {info : {$exists : true}})
答案 2 :(得分:11)
不,你不能只返回x / y的值;即使您限制了字段,外部结构仍然会被返回。
有关详细信息,请参阅Result Projections。
答案 3 :(得分:1)
答案 4 :(得分:0)
您可以使用aggregation framework:
$ project阶段选择字段
db.getCollection('yourCollection').aggregate([
{$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}},
{$project:{_id:0, "x":"$info.x", "y":"$info.y"}}
])
答案 5 :(得分:0)
从Mongo 4.2
开始,$replaceWith
聚合运算符可用于将一个文档替换为另一个文档(在本例中为子文档):
// { name: "MongoDB", info: { x: 203, y: 102 } }
db.collection.aggregate({ $replaceWith: "$info" })
// { "x" : 203, "y" : 102 }
在Mongo 4.2
之前并以Mongo 3.4
开头的$replaceRoot
可以代替$replaceWith
:
db.collection.aggregate({ $replaceRoot: { newRoot: "$info" } })