- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个具有以下结构的 mongoDB 文档:
{
user:user_name,
streams:[
{user:user_a, name:name_a},
{user:user_b, name:name_b},
{user:user_c, name:name_c}
]
}
我想使用 $pullAll 从流数组中移除,将流数组传递给它(数组的大小从 1 到 N 不等):
var streamsA = [{user:"user_a", name:"name_a"},{user:"user_b", name:"name_b"}]
var streamsB = [{name:"name_a", user:"user_a"},{name:"name_b", user:"user_b"}]
我使用以下 mongoDB 命令来执行更新操作:
db.streams.update({name:"user_name", {"$pullAll:{streams:streamsA}})
db.streams.update({name:"user_name", {"$pullAll:{streams:streamsB}})
移除 streamsA 成功,而移除 streamsB 失败。在翻阅 mongoDB 手册后,我发现 streamsA 和 streamsB 记录中的字段顺序必须与数据库中字段的顺序相匹配。对于 streamsB,顺序不匹配,这就是它没有被删除的原因。
我可以在执行更新操作之前将流重新排序为数据库文档顺序,但是有没有更简单、更清晰的方法来做到这一点?是否有一些标志可以设置为更新和/或 pullAll 以忽略订单?
谢谢你,加里
最佳答案
$pullAll
运算符实际上是一种“特殊情况”,主要用于单个“标量”数组元素,而不是您使用它的方式的子文档。
改为使用 $pull
它将检查每个元素并使用 $or
文档列表的条件:
db.streams.update(
{ "user": "user_name" },
{ "$pull": { "streams": { "$or": streamsB } }}
)
这样一来,字段的顺序或查找当前 $pullAll
操作实际执行的“完全匹配”都没有关系。
关于mongodb - 如何强制 MongoDB pullAll 忽略文档顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776617/
我有包含以下文档的数据库: > db.bios.find({"name.first":"James"}).pretty() { "_id" : 9, "name" :
目前我在 mongo 中有一个这样的数据结构: { "_id": "field00048", "colorValues": [ { "state
我有以下文件: { _id: 1 items: ['1a', '1b', '1c'] }, { _id: 2, items: ['2a', '2b', '2c'] } 是否可以
我只想使用 pullAll 从我的 mongoDB 数组中删除几个对象 db.collection.update({'_id': ObjectId(".....")}, { $pullAll : {
我有一个具有以下结构的 mongoDB 文档: { user:user_name, streams:[ {user:user_a, name:name_a},
我有一个如下所示的文档: db.blog.findOne() { "_id" : ObjectId("4dc1c938c4bfb4d21a000001"), "blog
我有这个 Mongoose 模式: // ------- creating active_rooms model ------- var active_rooms_schema = mongoose.
我目前正在使用其 C# 驱动程序与 MongoDB 打交道,尝试 API 中的每种方法(如果他们提供一些例子,这会更好) 一个接一个。 目前我正在使用 Update.PullAll() 方法。 我正在
我遇到了一个关于 mongodb 的问题。 db.tt.find() { "_id" : ObjectId("513c971be4b1f9d71bc8c769"), "name" : "a",
我是一名优秀的程序员,十分优秀!