我正在查询包含示例中显示的条目的数据库。所有条目都包含以下值:
_id
:overallitem
和placed_items
name
:te overallitem
loc
:overallitem
和placed_items
time_id
:存储overallitem
的时间placed_items
:包含placed_items
的数组(范围从零开始:placed_items : [],
到无限数量。category_id
:placed_items
full_id
:placed_items
我希望在给定name
和full_id
约束的情况下,在category_id
级别上提取placed_items
,time_id
和loc
示例数据:
{
"_id" : "5040",
"name" : "entry1",
"loc" : 1,
"time_id" : 20121001,
"placed_items" : [],
}
{
"_id" : "5041",
"name" : "entry2",
"loc" : 1,
"time_id" : 20121001,
"placed_items" : [
{
"_id" : "5043",
"category_id" : 101,
"full_id" : 901,
},
{
"_id" : "5044",
"category_id" : 102,
"full_id" : 902,
}
],
}
{
"_id" : "5042",
"name" : "entry3",
"loc" : 1,
"time_id" : 20121001,
"placed_items" : [
{
"_id" : "5045",
"category_id" : 101,
"full_id" : 903,
},
],
}
此示例的预期结果是:
"name" "full_id" "category_id"
"entry2" 901 101
"entry2" 902 102
"entry3" 903 101
因此,如果placed_items
为空,请将条目放在数据框中,如果placed_items
包含n
条目,请在数据框中放置n
个条目
我试图找出一个RBlogger示例来创建所需的数据帧。
#Set up database
mongo <- mongo.create()
#Set up condition
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "loc", 1)
mongo.bson.buffer.start.object(buf, "time_id")
mongo.bson.buffer.append(buf, "$gte", 20120930)
mongo.bson.buffer.append(buf, "$lte", 20121002)
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
#Count
count <- mongo.count(mongo, "items_test.overallitem", query)
#Note that these counts don't work, since the count should be based on
#the number of placed_items in the array, and not the number of entries.
#Setup Cursor
cursor <- mongo.find(mongo, "items_test.overallitem", query)
#Create vectors, which will be filled by the while loop
name <- vector("character", count)
full_id<- vector("character", count)
category_id<- vector("character", count)
i <- 1
#Fill vectors
while (mongo.cursor.next(cursor)) {
b <- mongo.cursor.value(cursor)
order_id[i] <- mongo.bson.value(b, "name")
product_id[i] <- mongo.bson.value(b, "placed_items.full_id")
category_id[i] <- mongo.bson.value(b, "placed_items.category_id")
i <- i + 1
}
#Convert to dataframe
results <- as.data.frame(list(name=name, full_id=full_uid, category_id=category_id))
如果我想要在overallitem
级别(即_id
或name
)提取值,但无法收集有关{{1}的信息,则条件有效且代码有效水平。此外,用于提取placed_items
和full_id
的点线调用似乎不起作用。有人可以帮忙吗?