我在MongoDB中有以下文档(2.4.5)
{
"_id" : 235399,
"casts" : {
"crew" : [
{
"_id" : 1186343,
"withBase" : true,
"department" : "Directing",
"job" : "Director",
"name" : "Connie Rasinski"
},
{
"_id" : 86342,
"withBase" : true
}
]
},
"likes" : 0,
"rating" : 0,
"rating_count" : 0,
"release_date" : "1955-11-11"
}
Run Code Online (Sandbox Code Playgroud)
我想从casts.crew中的数组元素中删除withBase.
我试过这个
db.coll.update({_id:235399},{$unset: { "casts.crew.withBase" : 1 } },false,true)
Run Code Online (Sandbox Code Playgroud)
没有改变.
并试过这个..
db.coll.update({_id:235399},{$unset: { "casts.crew" : { $elemMatch: { "withBase": 1 } } } },false,true)
Run Code Online (Sandbox Code Playgroud)
它从文档中删除了整个工作人员阵列.
有人可以提供正确的查询吗?
我试图更新嵌套数组中的值,但无法使其工作.
我的目标是这样的
{
"_id": {
"$oid": "1"
},
"array1": [
{
"_id": "12",
"array2": [
{
"_id": "123",
"answeredBy": [],
},
{
"_id": "124",
"answeredBy": [],
}
],
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要将值推送到"answersBy"数组.
在下面的例子中,我尝试将"success"字符串推送到"123 _id"对象的"answersBy"数组,但它不起作用.
callback = function(err,value){
if(err){
res.send(err);
}else{
res.send(value);
}
};
conditions = {
"_id": 1,
"array1._id": 12,
"array2._id": 123
};
updates = {
$push: {
"array2.$.answeredBy": "success"
}
};
options = {
upsert: true
};
Model.update(conditions, updates, options, callback);
Run Code Online (Sandbox Code Playgroud)
我找到了这个链接,但它的答案只说我应该使用类似对象的结构而不是数组.这不适用于我的情况.我真的需要我的对象嵌套在数组中
如果你能在这里帮助我会很棒.我花了好几个小时来搞清楚这一点.
先感谢您!
{
"_id": "xPBc4By8FemDwTPqH",
"u": {
"_id": "6PoZawHZcQz4Gwzcv",
"username": "michael"
},
"friends": [
{
"u": {
"_id": "eGqDjAjjtYADbuSnn",
"username": "michael",
"name": "michael"
}
},
{
"u": {
"_id": "k4gKCGwYryXDMMHvs",
"username": "joyce",
"name": "joyce"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想更新"friends.u.username"的名称:"michael"的名字是"你好",我需要怎么做.
我有这个非常烦人的问题,我无法使用mongoose更新任何东西.使用它真的很令人沮丧,文档根本没有帮助.
我有这个架构:
var userSchema = mongoose.Schema({
local : {
email : String,
password : String,
},
devices : [{
id : String,
name : String
}]
});
Run Code Online (Sandbox Code Playgroud)
这是我想在数组中添加设备的代码devices:
function updateDeviceList(user, deviceID, deviceName)
{
User.update({ 'local.email' : user},
{ $set: {'devices.id' : deviceID, 'devices.name' : deviceName}},
function(err, response)
{
if(err)
{
console.log("Update device error", err);
}
else {
console.log("Update device OK");
}
});
}
Run Code Online (Sandbox Code Playgroud)
此时我收到错误:
errmsg: 'cannot use the part (devices of devices.id) to traverse the element ({devices: []})' …
我有这样的对象
{
"_id" : ObjectId("5742be02289512cf98bf63e3"),
"name" : "test1",
"name" : "test1",
"attributes" : [
{
"name" : "x",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e8")
},
{
"name" : "y",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e7")
},
{
"name" : "z",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e6")
}
],
"__v" : 6
}
Run Code Online (Sandbox Code Playgroud)
我想更新所有文档,并为每个属性设置新字段.所以我想运行单个查询,一次更新所有文档.我想,这个查询会做到这一点
db.spaces.update({}, { $set: { "attributes.0.weight": 2 } }, {multi: true})
Run Code Online (Sandbox Code Playgroud)
但是当我运行此查询时,我收到错误.
"code":16837,
"errmsg":"位置运算符未找到查询所需的匹配.Unexontded update:attributes.$.weight"
所以我不明白为什么.请帮忙
在我使用 mongoose 的节点 js 项目中,我试图更新文档中的数组项。
我有一个users架构,里面有一个notifications数组。每个用户都有一个_id,每个通知项都有一个_id。
如何通过用户 ID 和通知 ID 更新通知?
用户架构:
const schema = mongoose.Schema({
notifications: [{
id: { type: mongoose.Schema.ObjectId },
title: { type: String },
body: { type: String },
isRead: { type: Boolean, default: false },
date: { type: Date }
}],
token: { type: String },
isActive: { type: Boolean, default: false }
}, { timestamps: {} })
Run Code Online (Sandbox Code Playgroud)
这是我迄今为止尝试过的:
exports.updateNotification = (req, res) => {
// Note: …Run Code Online (Sandbox Code Playgroud) 我最近开始使用MongoDB,我有一个关于更新文档中的数组的问题.我有这样的结构:
{
"_id" : ObjectId(),
"post" : "",
"comments" : [
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
...
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下查询:
update({"comments.user":"test"},{$set:{"comments.$.avatar": "new_avatar.jpg"}},false,true)
Run Code Online (Sandbox Code Playgroud)
问题是它更新了所有文档,但它只更新了每个文档中的第一个数组元素.有没有办法更新所有数组元素或我应该尝试手动执行?谢谢.
注意:请使用mongodb shell执行代码.
假设我有一份学生证件,如下所示
{
"_id" : 4,
"grades" : [
{
"grade" : 80,
"mean" : 75,
"std" : 8
},
{
"grade" : 85,
"mean" : 90,
"std" : 5
},
{
"grade" : 85,
"mean" : 90,
"std" : 5
},
{
"grade" : 85,
"mean" : 95,
"std" : 6
},
{
"grade" : 90,
"mean" : 85,
"std" : 5
}
]
}
Run Code Online (Sandbox Code Playgroud)
我们有两个问题:
问题1:假设你想用_id = 4 && grades.grade = 85 && grades.std = …
我有这样的数据集:
{
name : 'Doc Name',
photos: [
{
name: 'photo1',
url: 'http://.....'
},
{
name: 'photo2',
url: 'http://......'
}
],
etc ...
Run Code Online (Sandbox Code Playgroud)
使用Monk https://github.com/LearnBoost/monk如何更新photo2?我可以使用索引,因为我正在迭代字段.
我下面的当前尝试给了我一个错误,我不能为JSON选择器使用变量(如在索引中).
collection.update({_id: data._id}, {photos[i].data: filename}, function(err, updatedata) {
});
Run Code Online (Sandbox Code Playgroud) 假设我有以下文件
{
_id: ObjectId("5234cc89687ea597eabee675"),
code: "xyz",
tags: [ "school", "book", "bag", "headphone", "appliance" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 45, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("5234cc8a687ea597eabee676"),
code: "abc",
tags: [ "appliance", "school", "book" ],
qty: [
{ size: "6", num: 100, color: "green" },
{ size: "6", num: 50, color: "blue" },
{ size: "8", num: 100, color: "brown" }
] …Run Code Online (Sandbox Code Playgroud)