使用文件名直接将文件名和objectid元组存储在集合或查询中

时间:2016-03-07 13:05:05

标签: c# mongodb mongodb-query gridfs

目前,我正在使用文件名来查询来自MongoDB GridFS的数据。

现状

我使用GridFSBucketUploadFromBytesAsync将数据上传到MongoDB,该ObjectId返回filename以引用数据并以UploadFromBytesAsync作为参数。

问题

DownloadAsBytesAsync的对话是GridFS,应该用于查询来自ObjectId的数据。但是,此方法仅接受filename而不接受唯一 UploadFromBytesAsync,这也是在使用filename时传递的。但我想使用GridFS ObjectId来查询数据。

可能的解决方案

我的想法是,创建一个存储GridFS filenamefilename的集合来映射它们。因此,在查询数据时,我将在集合中搜索ObjectId,然后使用GridFSfilename获取字节。 GridFS属性也会获得一个索引。

或者我应该使用唯一filename直接从filename查询?并且DownloadAsBytesByName索引的是?

修改<!/强>

哦,我认为使用@assessmentsGrid.GetHtml( tableStyle: "grid", headerStyle: "gridHeader", alternatingRowStyle: "gridAlt", footerStyle: "gridFooter", columns: assessmentsGrid.Columns(assessmentsGrid.Column(null, null, format: @<text><a href="~/Admin/Assessments/AssessmentDetails/@item.assId">Details</a></text>), assessmentsGrid.Column("assId", "ID#"), assessmentsGrid.Column("Date", "Date",format: @<text>@((item.Date == null ||item.Date.Year == 1900) ? "" : item.Date.ToString("d MMM yyyy"))</text>), assessmentsGrid.Column("Title", "Title"), assessmentsGrid.Column("Forename", "Forename"), assessmentsGrid.Column("Surname", "Surname"), assessmentsGrid.Column("LocationName", "Location"), assessmentsGrid.Column("ActivityType", "Activity Type"), assessmentsGrid.Column("Q01", "Q01"), assessmentsGrid.Column("Q02", "Q02"), assessmentsGrid.Column("Q03", "Q03"), assessmentsGrid.Column("Q04", "Q04"), assessmentsGrid.Column("Q05", "Q05"), assessmentsGrid.Column("Q06", "Q06"), assessmentsGrid.Column("Q07", "Q07"), assessmentsGrid.Column("Q08", "Q08"), assessmentsGrid.Column("Q09", "Q09"), assessmentsGrid.Column("Q10", "Q10"), assessmentsGrid.Column("Q11", "Q11"), assessmentsGrid.Column("Q12", "Q12"), assessmentsGrid.Column("Q13", "Q13"), assessmentsGrid.Column("Q14", "Q14") ) ) 可以解决问题。 非常感谢你!

1 个答案:

答案 0 :(得分:1)

只要文件名是唯一的,您就可以按文件名使用获取

为确保只有一个文件,您可以使用存储选项:覆盖

您可以在fs集合上创建索引以包含fileName字段。

- 编辑 与覆盖loos的调用如:

IntentFilter intentfilterState = (IntentFilter)new IntentFilter();
intentfilterState.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

BroadcastReceiver nsca = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          //your code goes here
        }
}

_context.registerReceiver(nsca, intentfilterState);