当我查询
时db.Books.find({}, {_id: 0, "page.src": 1,"page.w": 1,"page.h": 1}).sort({"page.number": 1}).toArray()
它返回:
[
{
"page" : [
{
"src" : "http://xxx.xxx.xxx.png",
"w" : 903,
"h" : 1300
},
{
"src" : "http://xxx.xxx.xxx2.png",
"w" : 903,
"h" : 1300
}
]
}
]
如何在没有父对象的情况下返回查询:
[
{
"src" : "http://xxx.xxx.xxx.png",
"w" : 903,
"h" : 1300
},
{
"src" : "http://xxx.xxx.xxx2.png",
"w" : 903,
"h" : 1300
}
]
此结果将是其他功能的输入
谢谢..
修改
在我的机器中,来自@chraidarn的代码返回如下:
[
[
{
"src" : "http://xxx.xxx.xxx.png",
"w" : 903,
"h" : 1300
},
{
"src" : "http://xxx.xxx.xxx2.png",
"w" : 903,
"h" : 1300
}
]
]
我的功能仍然无法正常运行。看起来非常接近。还有什么想让它完美运作吗?谢谢..,
编辑2
如果需要,这是相关的架构:
book: {
type: String,
},
author: {
type: String,
},
title: {
type: String,
},
date: {
type: Date,
},
page: {
type: Array,
},
'page.$': {
type: Object
},
'page.$.number': {
type: Number
},
'page.$.src': {
type: String
},
'page.$.w': {
type: Number
},
'page.$.h': {
type: Number
},
谢谢你,
答案 0 :(得分:0)
对 map()
方法返回的光标使用 find()
方法返回没有父属性页的数组。要在mongo shell中演示这一点:
> var pages = db.Books.find({},
{_id: 0, "page.src": 1,"page.w": 1,"page.h": 1})
.sort({"page.number": 1})
.map(function(doc){return doc.page});
> printjson(pages[0]); /* access the desired array result by index */
[
{
"src" : "http://xxx.xxx.xxx.png",
"w" : 903,
"h" : 1300
},
{
"src" : "http://xxx.xxx.xxx2.png",
"w" : 903,
"h" : 1300
}
]
>
答案 1 :(得分:0)
*One more option, you can use aggregation with map*
> db.Books.aggregate([{$unwind:"$page"},{$project:{_id:0,"page":1}}]).map(function(doc){return doc.page}
)
**Result**
[
{
"src" : "http://xxx.xxx.xxx.png",
"w" : 903,
"h" : 1300
},
{
"src" : "http://xxx.xxx.xxx2.png",
"w" : 903,
"h" : 1300
}
]
答案 2 :(得分:0)
这可以使用像这样的聚合框架来完成
db.Books.aggregate( {$project: {"src" : "$page.src", "w": "$page.w", "h": "$page.h", _id: 0}} )
答案 3 :(得分:0)
无过滤器
db.Books.distinct("page")
过滤
db.Books.distinct("page", { "page": 1 })