我有一个集合:
{
"_id": ObjectId("503b83dfad79cc8d26000004"),
"uid": "9a8a2c5b9418cc1baadfa41255791414",
"link": "http://stackoverflow.com/questions",
"tasks": [
{
"query": "lorem lorem",
"list": [
{
"timestamp": "159",
"provider": "Lor Em"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
每个集合元素都包含TASKS数组.每个TASK元素都包含Query + List-array.
我必须附加,如果可能是新的TASK[index].LIST-object(见图)
但是我无法理解,我怎么能全部检查CASE_TO_FIND_ELEMENT:
db.myCollection.update(
{<CASE_TO_FIND_ELEMENT>},
{
$push: {
list: {
timestamp: "1233",
provider: "myNewProvier"
}
}
},
{
upsert: true,
multi: false
}
)
Run Code Online (Sandbox Code Playgroud)
更新:(
newQuery -> any string例如从服务器)使用in document.tasks[index].query
我在我的代码中创建这个值,并且必须检查它们是否存在于DB中:
uid + link + (query + (TIMESTAMP + PROVIDER))
更新v2
> db.demo.find().pretty()
{
"_id" : ObjectId("564f04f4be5d6f2f98c77dcd"),
"uid" : "id3",
"task" : [
{
"list" : {
"lid" : "lX",
"ltext" : "demoX"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
UID == "id3"在list-array中搜索并在任务数组中"lid" == "lX",如果没有找到,则按下新文档task.list-array:
db.demo.update({
"uid": "id3",
"task.list.lid": "lX"
}, {
$push: {
"task": {
"list": {
"lid": "lX2",
"ltext": "demoX2"
}
}
}
}, true, false)
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,mongo在数组中插入一个新的doc :(
> db.demo.find().pretty()
{
"_id" : ObjectId("564f04f4be5d6f2f98c77dcd"),
"uid" : "id3",
"task" : [
{
"list" : {
"lid" : "lX",
"ltext" : "demoX"
}
},
{
"list" : {
"lid" : "lX2",
"ltext" : "demoX2"
}
},
{
"list" : {
"lid" : "lX2",
"ltext" : "demoX2"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
你可以帮我在MongoDB集合中添加一些数据吗?谢谢!
您可以使用$addToSet。如果数组尚不存在,则只会将其追加到数组中。例如:
更新前:
{
"_id" : ObjectId("564f04f4be5d6f2f98c77dcd"),
"uid" : "id3",
"task" : [
{
"list" : {
"lid" : "lX",
"ltext" : "demoX"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后进行更新:
db.demo.update({
"uid": "id3",
"task.list.lid": "lX"
}, {
$addToSet: {
"task": {
"list": {
"lid": "lX2",
"ltext": "demoX2"
}
}
}
}, true, false)
Run Code Online (Sandbox Code Playgroud)
第一次更新后:
{
"_id" : ObjectId("564f04f4be5d6f2f98c77dcd"),
"uid" : "id3",
"task" : [
{
"list" : {
"lid" : "lX",
"ltext" : "demoX"
}
},
{
"list" : {
"lid" : "lX2",
"ltext" : "demoX2"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
第二次更新后:
{
"_id" : ObjectId("564f04f4be5d6f2f98c77dcd"),
"uid" : "id3",
"task" : [
{
"list" : {
"lid" : "lX",
"ltext" : "demoX"
}
},
{
"list" : {
"lid" : "lX2",
"ltext" : "demoX2"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |