mongo 中 $push 的问题
Issues with $push in mongo
我 运行遇到了一个问题,我不确定如何解决它。你能提供的任何帮助都会很棒,我相信这是我做错的愚蠢的事情。 :)
我正在尝试将一些项目 $push 到标题为 "subscribed_tribes" 的数组中。这是我在推送之前的文档:
{
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"),
"password" : "7CAE......",
"salt" : "748D...",
"created" : ISODate("2016-01-11T19:01:51.000+0000"),
"display_name" : "2686....",
"my_tribes" : "",
"subscribed_tribes" : ""
}
当我运行下面的c代码没有任何反应(没有变化)。
collection = mongoc_client_get_collection (client, "STribe", "users");
query = bson_new ();
bson_oid_t oid;
char *techSupportID = "5693c0196890f159c1741bb1";
bson_oid_init_from_string (&oid, techSupportID);
query = BCON_NEW ("_id", BCON_OID(&oid));
// Find the document
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
update = bson_new ();
//BSON_APPEND_UTF8 (update, "testing", "blah");
//mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
// Assemble query
update = BCON_NEW ("$push",
"{",
"subscribed_tribes",
"{",
"tribe_id", BCON_UTF8 (tribe_id),
"tribe_key", BCON_UTF8 (passphrase),
"}",
"}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
如果我取消注释这两行代码(bson_append 和 mongc_collection_update),那么整个文档将被覆盖并替换为:
{
"_id" : ObjectId("5693c0196890f159c1741bb1"),
"testing" : "blah",
"subscribed_tribes" : [
{
"tribe_id" : "5624200d4bacd3940b8b2d62",
"tribe_key" : "27D719EDC7A59...."
}
]
}
知道为什么原始代码没有正确地将数组项添加到 subscribed_tribes 中吗?其次,为什么包含未注释的行会覆盖整个文档?
我又一次确定我在做一些愚蠢的事情,但我不确定是什么。
subscribed_tribes
目前是字符串,不是数组。这就是为什么你不能在上面使用 $push
的原因。
如果您检查填充的 error
结果,您应该会收到一条错误消息。
所以您的文档需要看起来像这样 $push
才能工作:
{
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"),
"password" : "7CAE......",
"salt" : "748D...",
"created" : ISODate("2016-01-11T19:01:51.000+0000"),
"display_name" : "2686....",
"my_tribes" : "",
"subscribed_tribes" : []
}
我 运行遇到了一个问题,我不确定如何解决它。你能提供的任何帮助都会很棒,我相信这是我做错的愚蠢的事情。 :)
我正在尝试将一些项目 $push 到标题为 "subscribed_tribes" 的数组中。这是我在推送之前的文档:
{
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"),
"password" : "7CAE......",
"salt" : "748D...",
"created" : ISODate("2016-01-11T19:01:51.000+0000"),
"display_name" : "2686....",
"my_tribes" : "",
"subscribed_tribes" : ""
}
当我运行下面的c代码没有任何反应(没有变化)。
collection = mongoc_client_get_collection (client, "STribe", "users");
query = bson_new ();
bson_oid_t oid;
char *techSupportID = "5693c0196890f159c1741bb1";
bson_oid_init_from_string (&oid, techSupportID);
query = BCON_NEW ("_id", BCON_OID(&oid));
// Find the document
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
update = bson_new ();
//BSON_APPEND_UTF8 (update, "testing", "blah");
//mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
// Assemble query
update = BCON_NEW ("$push",
"{",
"subscribed_tribes",
"{",
"tribe_id", BCON_UTF8 (tribe_id),
"tribe_key", BCON_UTF8 (passphrase),
"}",
"}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
如果我取消注释这两行代码(bson_append 和 mongc_collection_update),那么整个文档将被覆盖并替换为:
{
"_id" : ObjectId("5693c0196890f159c1741bb1"),
"testing" : "blah",
"subscribed_tribes" : [
{
"tribe_id" : "5624200d4bacd3940b8b2d62",
"tribe_key" : "27D719EDC7A59...."
}
]
}
知道为什么原始代码没有正确地将数组项添加到 subscribed_tribes 中吗?其次,为什么包含未注释的行会覆盖整个文档?
我又一次确定我在做一些愚蠢的事情,但我不确定是什么。
subscribed_tribes
目前是字符串,不是数组。这就是为什么你不能在上面使用 $push
的原因。
如果您检查填充的 error
结果,您应该会收到一条错误消息。
所以您的文档需要看起来像这样 $push
才能工作:
{
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"),
"password" : "7CAE......",
"salt" : "748D...",
"created" : ISODate("2016-01-11T19:01:51.000+0000"),
"display_name" : "2686....",
"my_tribes" : "",
"subscribed_tribes" : []
}