mongodb $ addToSet失败,指定要插入

时间:2016-02-12 22:40:28

标签: mongodb mongodb-query pymongo-2.x

我已经对此进行了一些研究,并且没有发现任何立即突然出现在我身上的东西。

假设我们在集合中有一个文档(或多个文档),如下所示:

//First example document
{
  "_id": "JK",
  "letters": ["J", "K"]
}
//Second example document
{
  "_id": "LM",
  "letters": ["L"]
}

所以我运行一个类似下面的查询来查看我是否有任何匹配的文档,当然我不会这样,所以我希望得到null。

> db.example.findOne({"_id": "LM", "letters": {"$in": ["M"]}})
null

所以我做了更新并添加了#34; M"到文档上的字母数组(语法可能不太正确):

> db.example.update({"_id": "LM"}, {"$addToSet": {"letters": "M"}})

我有可能没有匹配的_id,所以findOne也会在给定此查询的集合中的示例文档时返回null。

> db.example.findOne({"_id": "AB", "letters": {"$in": ["A"]}})
null

根据我构建上述查询的方式,当" A"没有在字母或_ 34; AB"的_id中找到在任何文件中都找不到。在这种情况下,我知道这个文件不在那里,因为我知道集合中的内容。

我想做的是使用$ addToSet从上面保留我的更新查询并修改它以使用upsert WHILE还指定要在$ addToSet由于文档不存在而失败的情况下插入的文档关于数据库事务。这可能吗?或者我是否需要稍微分解一下我的查询才能适应这种情况?

因为此信息可能会影响答案: 我通过mongo shell和pymongo进行查询。

mongo版本:2.6.11

pymongo版本:2.8

感谢您的帮助!

编辑:所以经过休息和更多的挖掘,似乎setOnInsert做我想要的。我相信这可能解决了我的问题,但我还没有机会进行测试。

0 个答案:

没有答案