这是一个持有OHLC股票数据的样本文件,截断(通过python打印)。
{
"_id":ObjectId("4f1c567d60de7d0908000000"),
"ticker" : "msft"
"pricing":[
{
"Volume":"2094300",
"Adj Close":"85.87",
"High":"88.11",
"Low":"87.45",
"Date": ISODate("2011-01-14T00:00:00 Z"),
"Close":"88.10",
"Open":"87.74"
},
{
"Volume":"2351900",
"Adj Close":"85.81",
"High":"88.87",
"Low":"87.76",
"Date": ISODate("2011-01-13T00:00:00 Z"),
"Close":"88.04",
"Open":"88.47"
},
{
"Volume":"2732900",
"Adj Close":"86.42",
"High":"88.76",
"Low":"87.92",
"Date": ISODate("2011-01-12T00:00:00 Z"),
"Close":"88.66",
"Open":"88.02"
}
对此提出疑问:
有没有办法对文档中的内容进行索引而不是在集合中?我希望能够按日期轻松查找数据,也许有更好的方法来组织数据?
我对如何检索或更新特定定价数据感到困惑,我尝试使用以下方法推送新的定价数据:
var = collection.find({'ticker':ticker})//找到正确的文件
var [0] .update({'$ push':{'pricing':newpricingdata}})//更新公司价值
但它不起作用。查找工作正常,更新不。
newpricingdata看起来像(python print):
[
{
'Volume':'3522600',
'Adj Close':'85.65',
'High':'85.70',
'Low':'84.96',
'Date':datetime.datetime(2012,1,20,0,0),
'Close':'85.65',
'Open':'85.45'
},
{
'Volume':'3413700',
'Adj Close':'85.80',
'High':'86.23',
'Low':'84.92',
'Date':datetime.datetime(2012,1,19,0,0),
'Close':'85.80',
'Open':'85.10'
},
]
答案 0 :(得分:2)
如果您想按日期查询:
collection.ensureIndex({"pricing.Date" : 1})
要更新定价数据,您必须在update()
上调用collection
方法,就像在同一collection
上调用find()一样,并且您希望$ pushAll自newpricingdata
以来1}}是一个数组:
collection.update({ "_id" : ObjectId("4f1c567d60de7d0908000000")}, { '$pushAll' : { 'pricing' : newpricingdata } }, false, false);
问题:
如何在2012年1月20日之前检索自动收报机的价格 蟒蛇? mongodb文档并没有给出很好的例子 子树操作...
不可能只查询和返回数组的匹配元素,mongodb会给你整个数组。这意味着你必须在python中提取该元素。