我有以下文件在蒙戈收藏-
{
key1: "someValue",
key2: "someValue2",
key3: "someValue3",
firstSeen: "2021-03-17",
lastSeen: "2021-03-17",
timesSeen: 1
}
我想将此文档添加到Mongo,只有当具有key1
,key2
和key3
值的类似文档中不存在时。
如果确实存在类似的文档,我希望仅更新timesSeen(递增1)和lastSeen(设置今天的日期)值。
这样做的正确和最有效的方法是什么?我是否可以使用一个命令来执行此操作,而无需在之前搜索相关文档并插入新文档/根据该命令更新现有文档
您可以使用upsert on update和$and运算符检查键exist和$eq以比较值
db.collection.update({
$and: [
{
$and: [
{
key1: {
$exists: true
}
},
{
key1: {
$eq: "someValue"
}
}
]
},
{
$and: [
{
key2: {
$exists: true
}
},
{
key2: {
$eq: "someValue2"
}
}
]
},
{
$and: [
{
key3: {
$exists: true
}
},
{
key3: {
$eq: "someValue3"
}
}
]
},
]
},
{
$inc: {
timesSeen: 1
},
$set: {
key1: "someValue",
key2: "someValue2",
key3: "someValue3",
lastSeen: new Date()
}
},
{
upsert: true
})
蒙戈游乐场:https://mongoplayground.net/p/Kqt3TYCs3Aw
我有一个具有以下模式的用户集合: 用户将查找用户。名称,必须是唯一的。添加新用户时,我首先执行搜索,如果没有找到这样的用户,我会将新用户文档添加到集合中。搜索用户和添加新用户(如果未找到)的操作不是原子操作,因此,当多个应用程序服务器连接到DB服务器时,可能会同时收到两个具有相同用户名的添加用户请求,从而导致两个添加用户请求都找不到这样的用户,这反过来会导致两个文档具有相同的“user.name”
我正在尝试在我的Mongo数据库中插入一个新文档,如下所示: 正在工作,但不是我想要的。 “json”是一个对象数组,如下所示: 所以,我的代码为object创建了一个文档,我只想创建一个文档,其中包含一个名为json的属性中的对象: 这可能吗? 我试图使用插入,也。 谢谢。
我试图实现的很简单。只有当数据库不存在时,我才需要在数据库中创建一个用户条目。 应用程序流程: 使用Firebase身份验证(获取UID)创建用户 客户端代码(创建操作): firestore规则: 附加信息: 正如您可能已经知道的那样,代码不起作用。每次我运行客户端代码时,当前用户都会被一个新文档完全替换。但是,如果我从规则中删除以下行,一切都会正常工作: 但现在问题来了,如何保护用户文档中的数
我想知道是否有一种方法可以插入新文档并一次返回。 这是我目前使用的:
我在用弹性搜索和Nest库。我想知道当文档存在时,如何将文档批量插入ElasticSearch而不更新?
我有两个收藏(A和B),每个收藏约70000份文档。如果我比较A和B,95%的文档是相同的,只有5%是不同的。每个文档的结构在A和B中完全相同。A是一个固定集合,B是一个临时集合。我想将B合并到A中。如果A中存在来自B的文档-- ...我正在使用Python驱动程序(如果有必要的话)。 最有效的方法是什么?非常感谢。