3

我在 mongo shell 中提取了一个文档

   car = db.cars.findOne();

  ...make some changes... 

   car = db.cars.findOne();

   results for same document as if no changes had been made it

mongodb 中的游标上没有保存方法。我可以做些什么来持久化 shell 中的更改?

更新。汽车文档(第一个被拉起的)有一个先前驱动程序的数组。我必须删除其中一个元素并在删除后保存文档。

"previousdrivers" : [
    {
        "year" : "2011",
        "name" : Mr. Zed"
    },
    {
        "year" : "2012",
        "name" : "Mr. Bean"
    },
    {
        "year" : "2013",
        "name" : "Mr. Smith"
    }

]
4

2 回答 2

3

如果您使用的是 Mongodb shell,则需要使用集合对象上的方法来更新文档。

例如,如果您首先:

car = db.cars.findOne();

然后,修改car实例,你可以只使用save更新单个文档的方法(保存文档)。

db.cars.save(car);

这将更新cars集合中的单个文档。

对于更高级的用法,您可以考虑使用Array 运算符之一,它可以直接将数组作为update.

于 2013-09-01T20:06:27.593 回答
2

findOne()方法不返回游标,而是返回文档。您可以使用任何 javascript 方法来操作数组。完成后,您可以调用save()该文件。例子

> db.cars.save({make : "ford", gears : [1,2,3,4,5]})
> var doc = db.cars.findOne()
> doc.gears.pop()
5
> db.cars.save(doc)
> db.cars.findOne()
{
    "_id" : ObjectId("52239e729a713e4fbc425ed1"),
    "make" : "ford",
    "gears" : [
            1,
            2,
            3,
            4
    ]
}
于 2013-09-01T20:11:41.783 回答